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,經過中間件

相關文章
相關標籤/搜索