Flask vs Django: 該如何選擇Python框架?

語言: CN / TW / HK

根據JetBrains 做過的一項Python開發人員調查,Flask和Django是迄今為止最受歡迎的兩個Python Web框架。如果你開始使用Python進行Web開發,一定想知道應該學習或使用哪個Python框架用於下一個專案的開發。

其實,如果我們仔細比較一下Flask和Django這兩個框架,也許這個選擇就不難做出了。

概述Flask和Django

Flask是用Python編寫的Web應用程式框架,由工程師Armin Ronacher領導著一個名為Pocco的國際Python愛好者團體開發,於2010年建立,算是一個年輕的平臺。FlaskFlask基於WSGI概念,也基於Jinja-2模板引擎,是一個輕量級的微服務框架,讓開發者可以自由選擇設計模式、資料庫及工具。開發人員可以使用Flask構建Web應用程式和建立Web API,也可以用它來開發機器學習應用,實現大量的端到端專案。

相比之下,Django是在2005年建立的,一個免費、開源、成熟的高階Web應用程式框架,這個框架為快速和操作性強的Web應用程式開發提供了通用技術。它支援構建和維護高質量的Web應用程式,使開發過程更加順暢,更節省時間,其主要目的是構建複雜的資料庫驅動網站。

兩者在設計上的差異,導致這兩個框架在以下幾個方面存在區別:

1.體量與靈活性

如前面所言,Flask是一個輕量級的框架,小巧、靈活。相比之下,Django則“大而全”,體量要更大一些,同時支援大量的第三方應用程式,自然也沒有Flask那麼靈活。

事實上,這兩個框架之間最大的差異之一就是靈活性。由於Django是一個完整的web開發框架,因而Django可在不使用太多第三方庫和工具的條件下開發web應用程式。但是,Django缺少部分對模組優化的空間,也不支援任何API。因此,開發人員使用內建功能建立Web應用程式。這意味著如果開發人員想要修改Django一些預設的設定或者規則,這將不容易。

而Flask是一個擴充套件性很好的Web伺服器閘道器介面(WSGI)框架,可以使用各種Web開發庫和工具(包括支援API)來靈活地開發Web應用程式。對於經驗豐富的開發人員可以自由地插入和使用他們喜歡的庫和資料庫。

2.支援資料庫方面

Django包含一個簡單而強大的ORM(物件關係對映),ORM為生成和管理資料庫遷移提供支援。Django支援許多現成的關係資料庫,比如SQLite,PostgreSQL,MySQL和Oracle。換句話說,如果使用的是關係資料庫,則Django由於具有內建的ORM和遷移管理工具,因此入門起來更加容易。但是,如果您使用的是非關係資料庫,或者想使用其他的ORM(例如SQLAlchemy),則Django用起來就很不方便。

而Flask 由於相當於一個核心,不包含資料庫抽象層(ORM),沒有指定的資料庫,可以用MySQL,也可以用 NoSQL,因此Flask可提供多種型別的資料庫。

3.URL

這兩個框架都允許開發者將URL對映到檢視,並支援函式和基於類的檢視。

對Django來說,當請求與URL模式匹配時,將儲存HTTP請求資訊的請求物件(request)傳遞給檢視,然後呼叫該檢視。每當需要訪問請求物件時,都必須在函式中顯式傳遞它。Django URL和檢視分別在urls.py和views.py單獨的檔案中定義。

而在Flask這裡,Flask的核心是使用Werkzeug,它提供了URL路由和請求/響應處理。在Flask中,請求物件request是全域性的,因此您可以更輕鬆地訪問它(只要匯入即可)。

換句話說,Flask Web應用程式框架的URL傳送者是一個RESTful請求,而Django框架的URL傳送者是建立在正則路由之上。

除了以上幾個方面,Flask和Django還在操作風格、認證、文件和導航、模板引擎等方面存在區別,篇幅所限,這裡就不一一展開了。

正因為兩個框架在諸多方面存在區別,因而兩者各自的優點和缺點都很明顯,筆者用下面的這張表來總結Flask和Django的優缺點:

專案

Flask

Django

優點

1.與新技術的相容性更高;

2.容易實現簡單案例;

3.程式碼庫非常小;

4.應用高度可擴充套件;

5.容易構建快速原型;

6.路由URL很容易構建和維護應用程式;

7.資料庫整合很容易;

8.核心小,可輕鬆擴充套件;

9.最小的可用平臺;

10.很多資源都可以線上獲得,特別是在GitHub上

1.Django的設定和執行非常簡單;

2.Django通過使用國際化系統提供多語言網站;

3.Django允許端到端的軟體測試;

4.允許使用HTML輸出記錄API;

5.REST 框架為許多身份驗證規則提供了豐富的規定;

6.可用於限制單個使用者的速率API請求;

7.可概述URL的風格;

8.提供綜合認證系統;

9.快取框架附帶多個快取機制;

10.快速Web應用開發的高階框架;

11.可呼叫一大堆工具;

12.使用Python類進行資料建模

缺點

1.MVP在大多數情況下發展較慢;

2.複雜系統重構費用增加;

3.大型專案的重構複雜;

4.非同步可能是個小問題;

5.缺少資料庫和ORM;

6.建立大專案需要對框架有一些預先了解;

7.與Django相比,提供有限的支援和較小的網路

1.平臺非常龐大;

2.與新技術的相容性差;

3.程式碼庫大;

4.自動過載重啟整個伺服器;

5.一次只允許處理一個請求;

6.路由需要一些正則表示式的知識;

7.可以將元件安裝在一起,容易造成混亂

如何選擇

既然Flask和Django各有優缺點,那該如何進行選擇呢?這需要具體情況具體分析。選擇使用一種框架,要看開發者自己的經驗和要用在什麼樣的專案上。

就開發者自身而言,如果您是Web開發的新手,而不是Python的新手,建議從Flask開始。Django複雜而龐大,從專案結構到設定,再到安裝,有許多新手不瞭解的細節,新手在學習過程中容易迷失方向,最終花了很多時間瞭解Django本身,而沒有學到實際的基礎知識。

所以如果你需要了解一個Web框架,可以從Flask開始。在Django和Flask中,有不少簡單的原理是相似的。而且,有許多在Flask上開發的網站,其效能可以與在Django上開發的網站相媲美。

在對Web開發有一定了解後,可以再學習Django,隨著你的任務量增加,你會發現在Flask中加入新的功能是非常困難的,而在Django中是一件輕而易舉的事。

就專案而言,Flask適用於範圍界定明確且預期壽命較短的較小,較不復雜的專案。

由於Django會強制採用一致的應用程式結構,而無論專案的大小如何,幾乎所有Django專案都具有類似的結構。因此,Django可以更好地處理較大的專案(具有較大的團隊),這些專案具有更長的生命週期並具有很大的增長潛力,更適應團隊會不時地加入新開發人員的情況。

除此之外,如果你只是在開發純靜態網站或提供REST API服務,那麼Flask就夠用了。而如果你想建立功能全面的Web應用程式(比如新聞類網站、電子商務網站、ERP等),那麼Django會更好。

希望這篇文章,會對你選擇Python Web框架有幫助。

參考連結:

https://dzone.com/articles/flask-vs-django-which-python-framework-to-choose

https://testdriven.io/blog/django-vs-flask/