python五大主流web框架

python五大主流web框架

Django

Python框架雖然說是百花齊放,但仍然有那麼一家是最大的,它就是Django。要說Django是Python框架里最好的,有人同意也有人 堅決反對,但說Django的文檔最完善、市場佔有率最高、招聘職位最多估計大家都沒什麼意見。Django為人所稱道的地方主要有:

(1)完美的文檔,Django的成功,我覺得很大一部分原因要歸功於Django近乎完美的官方文檔(包括Django book)。

(2)全套的解決方案,Django象Rails一樣,提供全套的解決方案(full-stack framework + batteries included),基本要什麼有什麼(比如:cache、session、feed、orm、geo、auth),而且全部Django自己造,開發網 站應手的工具Django基本都給你做好了,因此開發效率是不用說的,出了問題也算好找,不在你的代碼里就在Django的源碼里。

(3)強大的URL路由配置,Django讓你可以設計出非常優雅的URL,在Django里你基本可以跟醜陋的GET參數說拜拜。

(4)自助管理後台,admin interface是Django里比較吸引眼球的一項contrib,讓你幾乎不用寫一行代碼就擁有一個完整的後台管理界面。

(5)系統緊耦合,如果你覺得Django內置的某項功能不是很好,想用喜歡的第三方庫來代替是很難的,比如下面將要說的ORM、Template。要在Django里用SQLAlchemy或Mako幾乎是不可能,即使打了一些補丁用上了也會讓你覺得非常非常彆扭。

(6)Template功能比較弱,不能插入Python代碼,要寫複雜一點的邏輯需要另外用Python實現Tag或Filter。關於模板這一點,一直以來爭論比較多。

URL配置雖然強大,但全部要手寫,這一點跟Rails的Convention over configuration的理念完全相左,高手和初識Django的人配出來的URL會有很大差異。

資料庫schema都給你定好了,這樣問題就來了,比如很多網站要求email地址唯一,可schema里這個欄位的值不是唯一的,糾結是必須的了。

總的來說,Django大包大攬,用它來快速開發一些Web運用是很不錯的。如果你順著Django的設計哲學來,你會覺得Django很好用,越用越順手;相反,你如果不能融入或接受Django的設計哲學,你用Django一定會很痛苦,趁早放棄的好。所以說在有些人眼裡Django無異於仙丹, 但對有一些人來說它又是毒藥且劇毒。

Pylons

除了Django另一個大頭就是Pylons了,因為TurboGears2.x是基於Pylons來做的,而repoze.bfg也已經併入Pylons project里這個大的項目里,後面不再單獨討論TurboGears和repoze.bfg了。

Pylons和Django的設計理念完全不同,Pylons本身只有兩千行左右的Python代碼,不過它還附帶有一些幾乎就是Pylons御用 的第三方模塊。Pylons只提供一個架子和可選方案,你可以根據自己的喜好自由的選擇Template、ORM、form、auth等組件,系統高度可 定製。我們常說Python是一個膠水語言(glue language),那麼我們完全可以說Pylons就是一個用膠水語言設計的膠水框架。

選擇Pylons多是選擇了它的自由,選擇了自由的同時也預示著你選擇了噩夢:

學習噩夢,Pylons依賴於許多第三方庫,它們並不是Pylons造,你學Pylons的同時還得學這些庫怎麼使用,關鍵有些時候你都不知道你 要學什麼。Pylons的學習曲線相對比Django要高的多,而之前Pylons的官方文檔也一直是人批評的對象,好在後來出了The Definitive Guide to Pylons這本書,這一局面有所改觀。因為這個原因,Pylons一度被譽為只適合高手使用的Python框架。

調試噩夢,因為牽涉到的模塊多,一旦有錯誤發生就比較難定位問題處在哪裡。可能是你寫的程序的錯、也可能是Pylons出錯了、再或是SQLAlchemy出錯了、搞不好是formencode有bug,反正很凌亂了。這個只有用的很熟了才能解決這個問題。

Pylons和repoze.bfg的融合可能會催生下一個能挑戰Django地位的框架。

Tornado

Tornado即是一個Web server(對此本文不作詳述),同時又是一個類web.py的micro-framework,作為框架Tornado的思想主要來源於Web.py,大家在Web.py的網站首頁也可以看到Tornado的大佬Bret Taylor的這麼一段話(他這裡說的FriendFeed用的框架跟Tornado可以看作是一個東西):

「[web.py inspired the] Web framework we use at FriendFeed [and] the webapp framework that ships with App Engine…」

因為有這層關係,後面不再單獨討論Tornado。

一個框架精簡的好處在於你可以聚焦在業務邏輯上,而不用太多的去關心框架本身或受框架的干擾,同時缺點也很明顯,許多事情你得自己操刀上。

我個人比較偏好這種精簡的框架,因為你很容易通過閱讀源碼弄明白整個框架的工作機制,如果框架那一塊不是很合意的話,我完全可以Monkey patch一下按自己的要求來。

Bottle

Bottle和Flask作為新生一代Python框架的代表,挺有意思的是都採用了decorator的方式配置URL路由,如:

from bottle import route, run @route(/:name)def index(name=World): return <b>Hello %s!</b> % name run(host=localhost, port=8080)

Bottle、Flask跟web.py一樣,都非常精簡,Bottle甚至所有的代碼都在那一個兩千來行的.py文件里。另外Flask和Pylons一樣,可以跟Jinja2、SQLAlchemy之類結合的很好。

不過目前不管是Bottle還是Flask成功案例都還很少。

Quixote

之所以要特別說一下Quixote,是因為國內的最大的用Python開發的網站「豆瓣網」是用Quixote開發的。

其它(web2py、uliweb、Karrigell、Werkzeug …)


推薦閱讀:

筆記本行業的一些簡單的誤區
國產機器人質量「攻堅戰」,機器人測評迫在眉睫
安識科技殷曉明:道阻且長,欣然前往 | 新銳
GeekPwn 安全極客嘉年華是個怎樣的活動?
4工業機器人和埃斯頓的明天

TAG:科技 | Python | Python入門 |