Flask, Django - 區別,個人體會


1. 目錄結構

一般情況下,Django很系統、統一。Flask項目目錄風格不同一,即使用上了藍圖。

2. 數據庫遷移

Flask要用第三方extensions,而Django自帶,這個很方便。

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。

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

flask hello

5. 新建模型方面差不多。

它們都是繼承ORM的Model。建模之后都是要加入到數據庫中,就是做一個數據庫遷移操作。
Flask是傳入想要創建的字段類型到model.Column,而Django有明顯的類給你使用,例如models.charField。

6. 反向獲取URL

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

這個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可以查看。

8. 中間件使用

Django在settings.py里設置,
Flask要初始化中間件實例,然后傳入app(Flask)實例。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM