2020年值得去了(le/liǎo)解的(de)12個(gè)Python Web框架
發表時(shí)間:2020-1-15
發布人(rén):融晨科技
浏覽次數:90
在(zài)Web開發領域,Python其實并沒有像在(zài)機器學習和(hé / huò)數據處理這(zhè)個(gè)領域一樣占有統治地(dì / de)位。不(bù)過鑒于(yú)Python在(zài)最近幾年的(de)強勢地(dì / de)位,了(le/liǎo)解一下Python的(de)web框架也(yě)挺有必要(yào / yāo)的(de)。萬一哪天我自己或者是(shì)客戶“腦抽”了(le/liǎo),真的(de)要(yào / yāo)用Python來(lái)寫web應用了(le/liǎo)呢?框架(Framework)讓程序員的(de)生活更容易,常用的(de)功能和(hé / huò)方法都打包進了(le/liǎo)框架裏,直接從庫裏拿出(chū)來(lái)修改一下就(jiù)用,确實是(shì)個(gè)省時(shí)省力,幹活多快好省的(de)好東西。
1. Why Python?
就(jiù)不(bù)廢話了(le/liǎo),用一張圖片和(hé / huò)一張圖表來(lái)解釋吧。
- 人(rén)生苦短,Python是(shì)岸
- 日月蛇(Python)教,一統江湖之(zhī)勢

2. Python Web框架總結
總體來(lái)說(shuō)Django和(hé / huò)Flask是(shì)最最流行的(de)Python Web框架,但是(shì)這(zhè)不(bù)是(shì)說(shuō)我們就(jiù)可以(yǐ)忽略其他(tā)的(de)框架。其實每一個(gè)框架都有其獨特的(de)設計和(hé / huò)優勢,在(zài)某些需求下,可能會更适合你的(de)項目。

我們可以(yǐ)把這(zhè)些框架分成兩種類型: 1.全功能框架(或重型框架),這(zhè)種類型的(de)框架包括創建web應用所需要(yào / yāo)的(de)大(dà)部分功能,通常可以(yǐ)用于(yú)構架需要(yào / yāo)完整功能和(hé / huò)複雜設計的(de)大(dà)型網站應用。2.輕量級框架,顧名思義,就(jiù)是(shì)提供比較簡單的(de)網站構建功能,通常用于(yú)簡單的(de),或者是(shì)小型的(de)網站應用。
全功能框架
Django
官網 | GitHub | PyPI | Awesome
Django應該是(shì)最流行的(de)Python Web框架了(le/liǎo),沒有之(zhī)一。而(ér)且其包含了(le/liǎo)創建應用需要(yào / yāo)的(de)幾乎全部功能,給人(rén)的(de)感覺是(shì)這(zhè)個(gè)框架希望框架本身實現各種功能,而(ér)不(bù)是(shì)依靠其他(tā)的(de)庫來(lái)完成。比如Django集成了(le/liǎo)安全認證,URL Routing,模闆引擎,ORM以(yǐ)及數據庫Scheme映射。這(zhè)使得Django非常強大(dà),有很好的(de)可擴展性,性能也(yě)非常好。Django支持 PostgreSQL, MySQL, SQLite, Oracle和(hé / huò)其他(tā)第三方數據庫。其ORM功能支持多數據庫之(zhī)間的(de)轉換。
總之(zhī)Django的(de)設計優秀,結構合理,性能出(chū)衆。适合不(bù)同規模的(de)網站,在(zài)2020年,Django會加入對機器學習的(de)支持,同時(shí)攜Python迅猛發展勢頭,很有可能會成爲(wéi / wèi)今年使用者增長最快的(de)Web框架。
Pyramid
官網 | GitHub | PyPI | Awesome
Pyramid是(shì)一個(gè)在(zài)2010年就(jiù)誕生的(de)框架,其目标是(shì)簡化web開發的(de)複雜性。最新的(de)版本是(shì)1.10,這(zhè)已經是(shì)其第10個(gè)正式版本了(le/liǎo)。這(zhè)個(gè)框架可以(yǐ)用于(yú)複雜的(de)應用開發,也(yě)适用輕量級應用。Pyraid的(de)開發社區還是(shì)比較活躍的(de)。版本更新頻繁,各技術群的(de)讨論也(yě)是(shì)非常熱烈的(de)。
TurboGears
官網 | GitHub | PyPI
TurboGear是(shì)一個(gè)開源和(hé / huò)數據驅動的(de)程序框架,它是(shì)建構在(zài)很多不(bù)同的(de)中間件和(hé / huò)庫的(de)基礎上(shàng),實際上(shàng)這(zhè)個(gè)框架試圖把其他(tā)的(de)Python框架中最好的(de)組件融入其中。TurboGear允許開發者能夠快速搭建數據驅動的(de)網站應用。它有非常好用的(de)模闆引擎,對聚合的(de)支持,功能強大(dà)而(ér)靈活的(de)ORM工具,而(ér)且自帶了(le/liǎo)大(dà)量的(de)小代碼片段,可以(yǐ)讓開發更容易。
現在(zài)TurboGear的(de)社區正在(zài)緻力于(yú)開發一個(gè)簡化(瘦身)版的(de)TurboGear框架,這(zhè)将會給大(dà)家帶來(lái)一個(gè)更加簡單易用的(de)框架。
Web2py
官網 | GitHub | PyPI
這(zhè)個(gè)原先是(shì)作爲(wéi / wèi)一個(gè)教學用的(de)項目被開發出(chū)來(lái),自帶IDE工具,爲(wéi / wèi)了(le/liǎo)簡化使用,其沒有項目級的(de)配置文件。Web2Py有一個(gè)内置的(de)ticket系統,隻要(yào / yāo)出(chū)現錯誤就(jiù)會生出(chū)ticket,用來(lái)追蹤運行時(shí)的(de)問題。
這(zhè)個(gè)項目的(de)社區和(hé / huò)郵件列表并不(bù)活躍
輕量級框架
Flask
官網 | GitHub | PyPI | Awesome
目前爲(wéi / wèi)止,Flask是(shì)最流行的(de)Python輕量級Web框架。這(zhè)個(gè)框架是(shì)受到(dào)Sinatra Ruby的(de)啓發而(ér)開發出(chū)來(lái)的(de)。 Flask基于(yú)Werkzeug WSGI toolkit以(yǐ)及 Jinja2 模闆。
Flask的(de)目的(de)是(shì)要(yào / yāo)建立一個(gè)非常穩定和(hé / huò)可靠的(de)Web應用的(de)基礎系統,我們可以(yǐ)使用Flack再加上(shàng)各種插件,擴展和(hé / huò)其他(tā)模塊,能夠構建功能強大(dà)的(de)網站和(hé / huò)應用。事實上(shàng),如果Django不(bù)适合的(de)應用類型,使用Flask基本上(shàng)是(shì)Python Web開發的(de)默認選擇。
Flask也(yě)是(shì)一個(gè)在(zài)2010年啓動的(de)開源項目,到(dào)目前爲(wéi / wèi)止已經更新了(le/liǎo)27個(gè)版本,由于(yú)曆史比較長,有些早期的(de)擴展已經不(bù)被支持,文檔也(yě)不(bù)再更新。需要(yào / yāo)在(zài)網絡上(shàng)找到(dào)最新的(de)文檔和(hé / huò)功能。
Bottle
官網 | GitHub | PyPI
Bottle是(shì)一個(gè)輕量級的(de)框架,最初是(shì)設計爲(wéi / wèi)一個(gè)API框架,整個(gè)Bottle框架是(shì)在(zài)一個(gè)源文件上(shàng)。沒有引用任何Python标準庫。建議是(shì)如果使用Bottle,最好是(shì)非常小的(de)程序,最好小于(yú)500行代碼并且沒有特殊的(de)需求。
CherryPy, Falcon, Hug, FastAPI - 極爲(wéi / wèi)小衆,就(jiù)不(bù)介紹了(le/liǎo)。讀者有興趣可以(yǐ)自己查看
異步框架
以(yǐ)下兩個(gè)開源框架用于(yú)處理高并發的(de)應用,可以(yǐ)用于(yú)需要(yào / yāo)解決C10K問題(10000+并發的(de)場景)
Sanic
官網 | GitHub | PyPI
Sanic是(shì)基于(yú)uvloop開發的(de),用于(yú)創建高并發異步Http請求的(de)應用,必須使用Python3.5+,兼容Python3.5+的(de)async/await方法,提供非阻塞的(de)異步訪問功能。Sanic是(shì)一個(gè)非常流行的(de)異步框架。提供了(le/liǎo)routing, middleware, cookies, versioning, static files, blueprints, class-based views, 以(yǐ)及sockets的(de)功能。不(bù)過比較可惜的(de)是(shì)并沒有提供模闆引擎,也(yě)沒有内置的(de)數據庫支持功能。
在(zài)一個(gè)Benchmark測試中,Sanic單進程和(hé / huò)100連接的(de)情況下,最高每秒同時(shí)并發處理33542個(gè)請求,平均時(shí)延2.96ms。
Tornado
官網 | GitHub | PyPI
Tornado是(shì)一個(gè)Python web框架加上(shàng)異步網絡處理庫,用于(yú)大(dà)流量的(de)網絡應用開發。使用非阻塞I/O,目标能夠處理C10K網站。如果配置合理,Tornado框架的(de)網站應用能夠輕松應對10000+并發的(de)流量。
Tornado的(de)流行程度介于(yú)Django和(hé / huò)Flask之(zhī)間,如果你需要(yào / yāo)一個(gè)web應用,同時(shí)也(yě)要(yào / yāo)支持高并發,那Tornado是(shì)最好的(de)選擇