在Python的web開發(fā)框架中,目前使用量最高的幾個(gè)是Django
、Flask
和Tornado
, 經(jīng)常會(huì)有人拿這幾個(gè)對比,相信大家的初步印象應(yīng)該是 Django
大而全、Flask
小而精、Tornado
性能高。
了解常用框架
Django
主要特點(diǎn)是大而全,集成了很多組件,例如:
Model
、Admin
、Form
等等, 不管你用得到用不到,反正它全都有,屬于全能型框架
-
優(yōu)點(diǎn)
-
Django
上手也比較容易,開發(fā)文檔詳細(xì)、完善,相關(guān)資料豐富 -
Django
的自帶ORM
非常優(yōu)秀,綜合評價(jià)略高于SQLAlchemy
-
Django
自帶的模板引擎簡單好用,但其強(qiáng)大程度和綜合評價(jià)略低于Jinja -
Django
目前支持Jinja
等非官方模板引擎 -
Django
自帶的數(shù)據(jù)庫管理app好評如潮 -
Django
非常適合企業(yè)級網(wǎng)站的開發(fā):快速、靠譜、穩(wěn)定 -
Django
成熟、穩(wěn)定、完善,但相比于Flask
,Django
的整體生態(tài)相對封閉 -
Django
是Python web
框架的先驅(qū),用戶多,第三方庫最豐富
-
-
缺點(diǎn)
-
Django
太重了,除了web框架,自帶ORM
和模板引擎,靈活和自由度不夠高 -
Django
能開發(fā)小應(yīng)用,但總會(huì)有“殺雞焉用牛刀”的感覺 -
Django
自帶ORM
也使Django
與關(guān)系型數(shù)據(jù)庫耦合度過高,如果想使用MongoDB
等NoSQL
數(shù)據(jù),需要選取合適的第三方庫,且總感覺Django+SQL
才是天生一對的搭配,Django+NoSQL
砍掉了Django
的半壁江山
-
Flask
主要特點(diǎn)小而輕,原生組件幾乎為0, 三方提供的組件請參考
Django
非常全面,屬于短小精悍型框架
- 優(yōu)點(diǎn)
-
Flask
確實(shí)很“輕”,不愧是Micro Framework
,從Django
轉(zhuǎn)向Flask的開發(fā)者一定會(huì)如此感慨,除非二者均為深入使用過 -
Flask
自由、靈活,可擴(kuò)展性強(qiáng),第三方庫的選擇面廣,開發(fā)時(shí)可以結(jié)合自己最喜歡用的輪子,也能結(jié)合最流行最強(qiáng)大的Python
庫 - 入門簡單,即便沒有多少
web
開發(fā)經(jīng)驗(yàn),也能很快做出網(wǎng)站 - 非常適用于小型網(wǎng)站
- 非常適用于開發(fā)
web
服務(wù)的API
- 開發(fā)大型網(wǎng)站無壓力,但代碼架構(gòu)需要自己設(shè)計(jì),開發(fā)成本取決于開發(fā)者的能力和經(jīng)驗(yàn)
- 各方面性能均等于或優(yōu)于
Django
-
Django
自帶的或第三方的好評如潮的功能,Flask
上總會(huì)找到與之類似第三方庫 -
Flask
靈活開發(fā),Python
高手基本都會(huì)喜歡Flask
,但對Django
卻可能褒貶不一 -
Flask
與關(guān)系型數(shù)據(jù)庫的配合使用不弱于Django
,而其與NoSQL
數(shù)據(jù)庫的配合遠(yuǎn)遠(yuǎn)優(yōu)于Django
-
Flask
比Django
更加Pythonic
,與Python
的philosophy
更加吻合
-
- 缺點(diǎn)
- 對于大型網(wǎng)站開發(fā),需要設(shè)計(jì)路由映射的規(guī)則,否則導(dǎo)致代碼混亂
Torando
主要特點(diǎn)是原生異步非阻塞,在IO密集型應(yīng)用和多任務(wù)處理上占據(jù)絕對性的優(yōu)勢,屬于專注型框架
-
優(yōu)點(diǎn)
- 少而精(輕量級框架)
- 注重性能優(yōu)越,速度快
- 解決高并發(fā)(請求處理是基于回調(diào)的非阻塞調(diào)用)
- 異步非阻塞
-
websockets
長連接 - 內(nèi)嵌了
HTTP
服務(wù)器 - 單線程的異步網(wǎng)絡(luò)程序,默認(rèn)啟動(dòng)時(shí)根據(jù)CPU數(shù)量運(yùn)行多個(gè)實(shí)例;利用CPU多核的優(yōu)勢
- 自定義模塊
-
缺點(diǎn)
- 模板和數(shù)據(jù)庫部分有很多第三方的模塊可供選擇,這樣不利于封裝為一個(gè)功能模塊
2. Tornado VS Django VS Flask
Tornado
性能比Django
和Flask
高很多
- 底層io處理機(jī)制:
Tornado
、gevent
、asyncio
、aiohttp
:自帶異步特性,底層使用的是事件循環(huán)
+協(xié)程
,Nodejs
和Go
語言都得益于協(xié)程輕松實(shí)現(xiàn)了高并發(fā)。因?yàn)?code>Tornado內(nèi)置了自己的HTTPServer
, 運(yùn)行和部署它與其他Python web框架不 太一樣
Django
和Flask
: 傳統(tǒng)的模型,同步框架,阻塞io模型。api寫同步代碼,使用celery
/apscheduler
處理異步任務(wù)。python 傳統(tǒng)的這種 wsgi 模型,主要是為了方便框架開發(fā)者只需要專注框架層面,而非 http 處理層面。但這樣卻增加了服務(wù)部署的復(fù)雜度,需要同時(shí)部署和配置 http server
和 wsgi server
,如果想支持異步還要部署 worker
。
- 性能:
最基本的 json
的序列化:Django
與 Flask
占優(yōu)
處理遠(yuǎn)程 http
請求的能力:Tornado
占絕對優(yōu)勢文章來源:http://www.zghlxwxcb.cn/news/detail-756099.html
數(shù)據(jù)庫與模板處理性能:Tornado
與 Flask
旗鼓相當(dāng),Django
飽受詬病的地方就是 Django ORM
確實(shí)很慢,Django
的開發(fā)效率與維護(hù)非常棒,然而 Django ORM
深度綁定了該框架,如果你需要把 Django ORM
換成其它輪子,那么也意味著 Django 的諸多優(yōu)秀特性將從此告別文章來源地址http://www.zghlxwxcb.cn/news/detail-756099.html
到了這里,關(guān)于2-Django、Flask和Tornado三大主流框架對比的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!