通常狀況下,Django很系統、統一。Flask項目目錄風格不一樣一,即便用上了藍圖。html
Flask要用第三方extensions,而Django自帶,這個很方便。python
Flask是用藍圖。Django能夠自動生成python manage.py startapp <app_name>
,並在Django的項目的settings那個INSTALLED_APPS字典裏註冊一下就好。數據庫
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
它們都是繼承ORM的Model。建模以後都是要加入到數據庫中,就是作一個數據庫遷移操做。
Flask是傳入想要建立的字段類型到model.Column,而Django有明顯的類給你使用,例如models.charField。flask
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
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
Django在settings.py裏設置,
Flask要初始化中間件實例,而後傳入app(Flask)實例。ui
Django中,每一個view function或者CBV中都要寫一個request參數。而Flask的view function則不用,由於
from flask import request # 這個request是對每一個請求獨立的,就像g變量。值得研究底層原理(Flask經過本地線程( thread local) 技術將請求對象在特定 的線程和請求中全局可訪問)
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
Flask,加鉤子裝飾器
@app.before_request def do_something(): pass # 這裏的代碼會在每一個請求處理前執行
Django,經過中間件