自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

原創(chuàng)
開(kāi)發(fā) 開(kāi)發(fā)工具
選擇使用哪種框架,要看開(kāi)發(fā)者自己的經(jīng)驗(yàn)和要用在什么樣的項(xiàng)目上。

根據(jù)JetBrains 做過(guò)的一項(xiàng)Python開(kāi)發(fā)人員調(diào)查,F(xiàn)lask和Django是迄今為止最受歡迎的兩個(gè)Python Web框架。如果你開(kāi)始使用Python進(jìn)行Web開(kāi)發(fā),一定想知道應(yīng)該學(xué)習(xí)或使用哪個(gè)Python框架用于下一個(gè)項(xiàng)目的開(kāi)發(fā)。

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

 概述Flask和Django

 Flask是用Python編寫(xiě)的Web應(yīng)用程序框架,由工程師Armin Ronacher領(lǐng)導(dǎo)著一個(gè)名為Pocco的國(guó)際Python愛(ài)好者團(tuán)體開(kāi)發(fā),于2010年創(chuàng)建,算是一個(gè)年輕的平臺(tái)。FlaskFlask基于WSGI概念,也基于Jinja-2模板引擎,是一個(gè)輕量級(jí)的微服務(wù)框架,讓開(kāi)發(fā)者可以自由選擇設(shè)計(jì)模式、數(shù)據(jù)庫(kù)及工具。開(kāi)發(fā)人員可以使用Flask構(gòu)建Web應(yīng)用程序和創(chuàng)建Web API,也可以用它來(lái)開(kāi)發(fā)機(jī)器學(xué)習(xí)應(yīng)用,實(shí)現(xiàn)大量的端到端項(xiàng)目。

相比之下,Django是在2005年創(chuàng)建的,一個(gè)免費(fèi)、開(kāi)源、成熟的高級(jí)Web應(yīng)用程序框架,這個(gè)框架為快速和操作性強(qiáng)的Web應(yīng)用程序開(kāi)發(fā)提供了通用技術(shù)。它支持構(gòu)建和維護(hù)高質(zhì)量的Web應(yīng)用程序,使開(kāi)發(fā)過(guò)程更加順暢,更節(jié)省時(shí)間,其主要目的是構(gòu)建復(fù)雜的數(shù)據(jù)庫(kù)驅(qū)動(dòng)網(wǎng)站。

兩者在設(shè)計(jì)上的差異,導(dǎo)致這兩個(gè)框架在以下幾個(gè)方面存在區(qū)別:

1.體量與靈活性

如前面所言,F(xiàn)lask是一個(gè)輕量級(jí)的框架,小巧、靈活。相比之下,Django則“大而全”,體量要更大一些,同時(shí)支持大量的第三方應(yīng)用程序,自然也沒(méi)有Flask那么靈活。

事實(shí)上,這兩個(gè)框架之間最大的差異之一就是靈活性。由于Django是一個(gè)完整的web開(kāi)發(fā)框架,因而Django可在不使用太多第三方庫(kù)和工具的條件下開(kāi)發(fā)web應(yīng)用程序。但是,Django缺少部分對(duì)模塊優(yōu)化的空間,也不支持任何API。因此,開(kāi)發(fā)人員使用內(nèi)置功能創(chuàng)建Web應(yīng)用程序。這意味著如果開(kāi)發(fā)人員想要修改Django一些默認(rèn)的設(shè)定或者規(guī)則,這將不容易。

而Flask是一個(gè)擴(kuò)展性很好的Web服務(wù)器網(wǎng)關(guān)接口(WSGI)框架,可以使用各種Web開(kāi)發(fā)庫(kù)和工具(包括支持API)來(lái)靈活地開(kāi)發(fā)Web應(yīng)用程序。對(duì)于經(jīng)驗(yàn)豐富的開(kāi)發(fā)人員可以自由地插入和使用他們喜歡的庫(kù)和數(shù)據(jù)庫(kù)。

2.支持?jǐn)?shù)據(jù)庫(kù)方面

Django包含一個(gè)簡(jiǎn)單而強(qiáng)大的ORM(對(duì)象關(guān)系映射),ORM為生成和管理數(shù)據(jù)庫(kù)遷移提供支持。Django支持許多現(xiàn)成的關(guān)系數(shù)據(jù)庫(kù),比如SQLite,PostgreSQL,MySQL和Oracle。換句話(huà)說(shuō),如果使用的是關(guān)系數(shù)據(jù)庫(kù),則Django由于具有內(nèi)置的ORM和遷移管理工具,因此入門(mén)起來(lái)更加容易。但是,如果您使用的是非關(guān)系數(shù)據(jù)庫(kù),或者想使用其他的ORM(例如SQLAlchemy),則Django用起來(lái)就很不方便。

而Flask 由于相當(dāng)于一個(gè)內(nèi)核,不包含數(shù)據(jù)庫(kù)抽象層(ORM),沒(méi)有指定的數(shù)據(jù)庫(kù),可以用MySQL,也可以用 NoSQL,因此Flask可提供多種類(lèi)型的數(shù)據(jù)庫(kù)。

3.URL

這兩個(gè)框架都允許開(kāi)發(fā)者將URL映射到視圖,并支持函數(shù)和基于類(lèi)的視圖。

對(duì)Django來(lái)說(shuō),當(dāng)請(qǐng)求與URL模式匹配時(shí),將保存HTTP請(qǐng)求信息的請(qǐng)求對(duì)象(request)傳遞給視圖,然后調(diào)用該視圖。每當(dāng)需要訪(fǎng)問(wèn)請(qǐng)求對(duì)象時(shí),都必須在函數(shù)中顯式傳遞它。Django URL和視圖分別在urls.py和views.py單獨(dú)的文件中定義。

而在Flask這里,F(xiàn)lask的核心是使用Werkzeug,它提供了URL路由和請(qǐng)求/響應(yīng)處理。在Flask中,請(qǐng)求對(duì)象request是全局的,因此您可以更輕松地訪(fǎng)問(wèn)它(只要導(dǎo)入即可)。

換句話(huà)說(shuō),F(xiàn)lask Web應(yīng)用程序框架的URL發(fā)送者是一個(gè)RESTful請(qǐng)求,而Django框架的URL發(fā)送者是建立在正則路由之上。

除了以上幾個(gè)方面,F(xiàn)lask和Django還在操作風(fēng)格、認(rèn)證、文檔和導(dǎo)航、模板引擎等方面存在區(qū)別,篇幅所限,這里就不一一展開(kāi)了。

正因?yàn)閮蓚€(gè)框架在諸多方面存在區(qū)別,因而兩者各自的優(yōu)點(diǎn)和缺點(diǎn)都很明顯,筆者用下面的這張表來(lái)總結(jié)Flask和Django的優(yōu)缺點(diǎn):

項(xiàng)目

Flask

Django

優(yōu)點(diǎn)

1.與新技術(shù)的兼容性更高;

2.容易實(shí)現(xiàn)簡(jiǎn)單案例;

3.代碼庫(kù)非常??;

4.應(yīng)用高度可擴(kuò)展;

5.容易構(gòu)建快速原型;

6.路由URL很容易構(gòu)建和維護(hù)應(yīng)用程序;

7.數(shù)據(jù)庫(kù)集成很容易;

8.內(nèi)核小,可輕松擴(kuò)展;

9.最小的可用平臺(tái);

10.很多資源都可以在線(xiàn)獲得,特別是在GitHub上

1.Django的設(shè)置和運(yùn)行非常簡(jiǎn)單;

2.Django通過(guò)使用國(guó)際化系統(tǒng)提供多語(yǔ)言網(wǎng)站;

3.Django允許端到端的軟件測(cè)試;

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

5.REST 框架為許多身份驗(yàn)證規(guī)則提供了豐富的規(guī)定;

6.可用于限制單個(gè)用戶(hù)的速率API請(qǐng)求;

7.可概述URL的風(fēng)格;

8.提供綜合認(rèn)證系統(tǒng);

9.緩存框架附帶多個(gè)緩存機(jī)制;

10.快速Web應(yīng)用開(kāi)發(fā)的高級(jí)框架;

11.可調(diào)用一大堆工具;

12.使用Python類(lèi)進(jìn)行數(shù)據(jù)建模

缺點(diǎn)

1.MVP在大多數(shù)情況下發(fā)展較慢;

2.復(fù)雜系統(tǒng)重構(gòu)費(fèi)用增加;

3.大型項(xiàng)目的重構(gòu)復(fù)雜;

4.異步可能是個(gè)小問(wèn)題;

5.缺少數(shù)據(jù)庫(kù)和ORM;

6.建立大項(xiàng)目需要對(duì)框架有一些預(yù)先了解;

7.與Django相比,提供有限的支持和較小的網(wǎng)絡(luò)

 

1.平臺(tái)非常龐大;

2.與新技術(shù)的兼容性差;

3.代碼庫(kù)大;

4.自動(dòng)重載重啟整個(gè)服務(wù)器;

5.一次只允許處理一個(gè)請(qǐng)求;

6.路由需要一些正則表達(dá)式的知識(shí);

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

?

如何選擇

 既然Flask和Django各有優(yōu)缺點(diǎn),那該如何進(jìn)行選擇呢?這需要具體情況具體分析。選擇使用一種框架,要看開(kāi)發(fā)者自己的經(jīng)驗(yàn)和要用在什么樣的項(xiàng)目上。

就開(kāi)發(fā)者自身而言,如果您是Web開(kāi)發(fā)的新手,而不是Python的新手,建議從Flask開(kāi)始。Django復(fù)雜而龐大,從項(xiàng)目結(jié)構(gòu)到設(shè)置,再到安裝,有許多新手不了解的細(xì)節(jié),新手在學(xué)習(xí)過(guò)程中容易迷失方向,最終花了很多時(shí)間了解Django本身,而沒(méi)有學(xué)到實(shí)際的基礎(chǔ)知識(shí)。

所以如果你需要了解一個(gè)Web框架,可以從Flask開(kāi)始。在Django和Flask中,有不少簡(jiǎn)單的原理是相似的。而且,有許多在Flask上開(kāi)發(fā)的網(wǎng)站,其性能可以與在Django上開(kāi)發(fā)的網(wǎng)站相媲美。

在對(duì)Web開(kāi)發(fā)有一定了解后,可以再學(xué)習(xí)Django,隨著你的任務(wù)量增加,你會(huì)發(fā)現(xiàn)在Flask中加入新的功能是非常困難的,而在Django中是一件輕而易舉的事。

就項(xiàng)目而言,F(xiàn)lask適用于范圍界定明確且預(yù)期壽命較短的較小,較不復(fù)雜的項(xiàng)目。

由于Django會(huì)強(qiáng)制采用一致的應(yīng)用程序結(jié)構(gòu),而無(wú)論項(xiàng)目的大小如何,幾乎所有Django項(xiàng)目都具有類(lèi)似的結(jié)構(gòu)。因此,Django可以更好地處理較大的項(xiàng)目(具有較大的團(tuán)隊(duì)),這些項(xiàng)目具有更長(zhǎng)的生命周期并具有很大的增長(zhǎng)潛力,更適應(yīng)團(tuán)隊(duì)會(huì)不時(shí)地加入新開(kāi)發(fā)人員的情況。

除此之外,如果你只是在開(kāi)發(fā)純靜態(tài)網(wǎng)站或提供REST API服務(wù),那么Flask就夠用了。而如果你想創(chuàng)建功能全面的Web應(yīng)用程序(比如新聞?lì)惥W(wǎng)站、電子商務(wù)網(wǎng)站、ERP等),那么Django會(huì)更好。

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

譯者介紹

王德朕,51CTO社區(qū)編輯,10年互聯(lián)網(wǎng)產(chǎn)研經(jīng)驗(yàn),6年IT教培行業(yè)經(jīng)驗(yàn)。原K12教育上市公司產(chǎn)品經(jīng)理,技術(shù)博客專(zhuān)家,藍(lán)橋簽約作者,《滾雪球?qū)WPython》專(zhuān)欄作者,《爬蟲(chóng)100例》專(zhuān)欄特約作者,78技術(shù)人社區(qū)發(fā)起者。

參考鏈接:

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

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

責(zé)任編輯:閆懷德 來(lái)源: 51CTO
相關(guān)推薦

2017-09-11 10:55:22

PythonWeb框架

2019-04-29 10:12:35

WebFlaskDjango

2023-04-28 08:28:14

FlaskDjangoPython

2023-08-27 15:10:29

Django和Flask框架

2024-05-13 12:42:20

2023-10-09 18:17:52

Python語(yǔ)言Web

2024-09-12 22:45:47

2025-04-02 11:40:00

框架FlaskDjango

2023-12-08 13:11:58

2019-05-15 13:48:17

PythonDjangoFlask

2019-03-10 22:21:47

框架AI開(kāi)發(fā)

2021-10-26 10:30:31

代碼編輯器LinuxVS Code

2024-08-30 08:51:17

MavenGradleJava

2021-02-16 23:43:53

深度學(xué)習(xí)人工智能IT

2018-06-28 08:41:37

2021-08-15 21:36:00

框架開(kāi)發(fā)JavaScript

2025-04-22 09:17:41

2020-01-03 09:57:33

Microsoft SSQL數(shù)據(jù)庫(kù)

2018-10-15 10:08:53

程序員技能深度學(xué)習(xí)

2021-04-28 07:03:28

DjangoFlaskFastAPI
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)