Flask vs Django: 該如何選擇Python框架?
原創根據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框架有幫助。
譯者介紹
王德朕,51CTO社區編輯,10年互聯網產研經驗,6年IT教培行業經驗。原K12教育上市公司產品經理,技術博客專家,藍橋簽約作者,《滾雪球學Python》專欄作者,《爬蟲100例》專欄特約作者,78技術人社區發起者。
參考鏈接:
https://dzone.com/articles/flask-vs-django-which-python-framework-to-choose
https://testdriven.io/blog/django-vs-flask/