Flask, Django - 区别,我的体会

1. 目录结构

通常状况下,Django很系统、统一。Flask项目目录风格不一样一,即便用上了蓝图。html

2. 数据库迁移

Flask要用第三方extensions,而Django自带,这个很方便。python

3. 模块化

Flask是用蓝图。Django能够自动生成python manage.py startapp <app_name>,并在Django的项目的settings那个INSTALLED_APPS字典里注册一下就好。数据库

4. 命令行

Django的命令行初始更多功能,例如migrate。但Flask自定义命令很简单。
启动方面,Flask有两种,一种是经过manage.py帮助脚本去运行,另外一种是export环境变量,用flask run来运行,官方文档建议后面这种,1.02版本还新增了一个环境变量FLASK_ENV。由于Flask依赖5个包,其中一个是click,因此能够自定义CMD。django

@app.cli.command()
def hello():
    click.echo('Hello, xxx!')

flask hello

5. 新建模型方面差很少。

它们都是继承ORM的Model。建模以后都是要加入到数据库中,就是作一个数据库迁移操做。
Flask是传入想要建立的字段类型到model.Column,而Django有明显的类给你使用,例如models.charField。flask

6. 反向获取URL

urlpatterns = [ path('', views.post_list, name='post_list') ]app

这个name,至关于Flask的endpoint。意思都是经过反向这个名字,reverse(name)去得到URL。模块化

// 在模板中
<a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h1>     //Django
{% url_for('") %}  // Flask

7. 路由

Django的路由和view functions是分开写的:urls.py, views.py。而Flask是都写在views.py中,view function和url写在一块儿(以装饰器的形式app.route)。
由于Django是MTV模式。其实和MVC模式差很少。大体上是Controller变成了views.py和urls.py。函数

Flask命令行中使用flask routes能够查看URL与view function的映射关系。代码中使用app.url_map能够查看。post

8. 中间件使用

Django在settings.py里设置,
Flask要初始化中间件实例,而后传入app(Flask)实例。ui

9. Request对象

Django中,每一个view function或者CBV中都要写一个request参数。而Flask的view function则不用,由于

from flask import request

# 这个request是对每一个请求独立的,就像g变量。值得研究底层原理(Flask经过本地线程( thread local) 技术将请求对象在特定
的线程和请求中全局可访问)

10. 限制http请求方法

Flask

@app.route('/hello', methods=['GET', 'POST'])
def hello():
return '<h1>Hello, Flask!</h1>'

Django

from django.views.decorators.http import require_http_methods
@require_http_methods(['GET','POST'])
def login(request):
    pass

11. 钩子函数

Flask,加钩子装饰器

@app.before_request
def do_something():
    pass # 这里的代码会在每一个请求处理前执行

Django,经过中间件

相关文章
相关标签/搜索