三個最火的Python Web開發框架

王平發表於2019-04-01

今天聊下Python Web框架,Python Web框架大致分成三類,分別是Full-Stack Web框架、Non Full-Stack Web框架、Asynchronous 非同步框架。

 

什麼是Web框架

框架的意思就是把基礎的,常用的功能都寫好了。比如:URL分發(路由)、資料庫讀寫(ORM)、表單,admin後臺管理等, 你只需要理解怎麼呼叫這個框架,讓你把精力放在業務邏輯實現上。

python web開發框架

框架怎麼分優劣

我們通常說的某某框架用起來舒服,用起來方便,是基於哪些考慮的呢?

我相信不同的開發人員說出的原因是不一樣的。有的喜歡功能強大的框架,有的喜歡易上手的框架,有的喜歡小巧,配置靈活的框架。

有的開發者喜歡框架功能很全,不用自己造輪子,比如Django框架,它提供的功能非常全面,比如(cache、session、登陸、auth授權等等),和它強大的中介軟體,提供全方案Web開發支援。我們把這種框架叫做Full-Stack Web框架。

當然功能強大和全面的反面就是有點複雜(相對的),有點臃腫,不太靈活。所以Django上手要慢一點,自己造一個輪子替換Django某些內建功能或者使用第三方功能時不太靈活。

有的喜歡框架小巧,靈活,就像Flask框架一樣。跟Django相反,Flask小巧、靈活,它的很多功能需要開發者以外掛的形式向裡安裝,你也可以自己定製。這類不提供全方案開發支援的框架,我們叫做Non Full-Stack Web框架。

有的喜歡速度,喜歡框架本身的速度很快,喜歡I/O效能吞吐高併發,像Tornado和Sanic框架。它們是非同步框架,I/O效能相對就高一些。當然非同步程式設計的理解難度要大一點。

上面解釋了什麼是Full-Stack Web框架、Non Full-Stack Web框架和Asynchronous 非同步框架。下面具體介紹這三個下面的代表框架。

 

一、Django

Django是Full-Stack Web框架的代表,功能非常全面和成熟,開發文件很完備。它在Python Web開發框架的佔有率應該是第一。Django的宗旨就是儘可能的提供所有功能,讓你用盡可能少的程式碼完成業務。官方的說法是,如果你的開發日期非常緊,那麼選用Django是正確的做法。 我們自己開發的專案也全都選用的Django。

缺點:

在urls.py裡配置URL路由有點麻煩;

模板不能像php一樣在模板插程式碼;

資料庫ORM組裝出來的sql語句效能較差;

 

二、Flask

Flask算是Non Full-Stack Web框架代表,是一個輕量級的Web Framework,它在中國的應用其實挺廣的。它的設計目的是幫助構建一個穩定的Web基礎應用。它的靈活性體現在,它的模組化設計可以輕鬆適合開發者的需求。Flask跟Django比起來,你可以自己造輪子,也可以是以外掛的形式使用第三方庫。使用Restful request的風格,很適合開發web api,Flask也更加pythonic。

今天正好是愚人節,其實Flask是在2010年4月1日愚人節這天釋出的,作者本意是想在這一天整蠱一番的,誰知Flask在後來卻越來越火了。

 

三、Tornado

Tornado其實也是Non Full-Stack Web框架。因為它支援非同步,所以就單獨說一下。

跟上面Django和Flask比起來的話,好像沒啥可說的了,就是IO效能優秀。官方說能支援1萬個併發請求。適合一些高併發專案。

因為一些原因,我對Tornado的印象不太好。16年的時候公司收購了一個專案,然後我去杭州接手這個專案的技術部分,系統是用Tornado開發的。團隊是從杭州大廠出來的,設計得非常繁複,說是要支援4萬併發的業務。但是到我們買的那天,業務連4千併發都不到。接下來的一年公司為這個專案付出了很大代價。

當然在Python3時代,非同步框架還有其他的,比如Sanic,效能測試對比顯示,Sanic比Tornado快幾丟丟。猿人學網站除了有Python教程,我也正在寫Sanic教程,感興趣的可以去看看。

 

說了這麼多,如何選擇Python Web框架?

如果你要開發一個大型專案,比如電商系統,需要各種各樣的功能都具備,那麼使用Full-Stack Web框架是第一選擇。如果是一個像內容系統,功能有限,不需要面面俱到,那麼用Non Full-Stack是第一選擇。

Python Web框架大約有30多種,我介紹了幾個典型的和運用面比較大的,上面三種在國內的公司中也是運用比較廣泛的,能熟練用其中一種做開發,應該可以找到個web開發工作。

 

Python Web相關延展閱讀:

簡說Python Web非同步框架

深入瞭解Python的非同步IO:概念和歷史

Python 非同步 IO系列:認識asyncio

Python asyncio協程應用例子

 

猿人學banner宣傳圖

我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。

***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***

相關文章