淺談五大(dà)Python Web框架 - 新聞資訊 - 雲南小程序開發|雲南軟件開發|雲南網站建設-昆明融晨信息技術有限公司

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不(bù)管是(shì)網站,軟件還是(shì)小程序,都要(yào / yāo)直接或間接能爲(wéi / wèi)您産生價值,我們在(zài)追求其視覺表現的(de)同時(shí),更側重于(yú)功能的(de)便捷,營銷的(de)便利,運營的(de)高效,讓網站成爲(wéi / wèi)營銷工具,讓軟件能切實提升企業内部管理水平和(hé / huò)效率。優秀的(de)程序爲(wéi / wèi)後期升級提供便捷的(de)支持!

您當前位置>首頁 » 新聞資訊 » 網站建設 >

淺談五大(dà)Python Web框架

發表時(shí)間:2019-3-5

發布人(rén):融晨科技

浏覽次數:46

轉載:http://feilong.me/2011/01/talk-about-Python-web-framework

說(shuō)到(dào)Web Framework,Ruby的(de)世界Rails一統江湖,而(ér)Python則是(shì)一個(gè)百花齊放的(de)世界,各種micro-framework、framework不(bù)可勝數,不(bù)完全列表見:

http://wiki.python.org/moin/WebFrameworks

雖然另一大(dà)腳本語言PHP也(yě)有不(bù)少框架,但遠沒有Python這(zhè)麽誇張,也(yě)正是(shì)因爲(wéi / wèi)Python Web Framework(Python Web開發框架,以(yǐ)下簡稱Python框架)太多,所以(yǐ)在(zài)Python社區總有關于(yú)Python框架孰優孰劣的(de)話題,讨論的(de)時(shí)間跨度甚至長達3-5年。

Python這(zhè)麽多框架,能挨個(gè)玩個(gè)遍的(de)人(rén)不(bù)多,坦白的(de)說(shuō)我也(yě)隻用過其中的(de)三個(gè)開發過項目,另外一些稍微接觸過,所以(yǐ)這(zhè)裏隻能淺談一下,歡迎懂行的(de)朋友們補充。

Django

Python框架雖然說(shuō)是(shì)百花齊放,但仍然有那麽一家是(shì)最大(dà)的(de),它就(jiù)是(shì)Django。要(yào / yāo)說(shuō)Django是(shì)Python框架裏最好的(de),有人(rén)同意也(yě)有人(rén) 堅決反對,但說(shuō)Django的(de)文檔最完善、市場占有率最高、招聘職位最多估計大(dà)家都沒什麽意見。Django爲(wéi / wèi)人(rén)所稱道(dào)的(de)地(dì / de)方主要(yào / yāo)有:

完美的(de)文檔,Django的(de)成功,我覺得很大(dà)一部分原因要(yào / yāo)歸功于(yú)Django近乎完美的(de)官方文檔(包括Django book)。

全套的(de)解決方案,Django象Rails一樣,提供全套的(de)解決方案(full-stack framework + batteries included),基本要(yào / yāo)什麽有什麽(比如:cache、session、feed、orm、geo、auth),而(ér)且全部Django自己造,開發網 站應手的(de)工具Django基本都給你做好了(le/liǎo),因此開發效率是(shì)不(bù)用說(shuō)的(de),出(chū)了(le/liǎo)問題也(yě)算好找,不(bù)在(zài)你的(de)代碼裏就(jiù)在(zài)Django的(de)源碼裏。

強大(dà)的(de)URL路由配置,Django讓你可以(yǐ)設計出(chū)非常優雅的(de)URL,在(zài)Django裏你基本可以(yǐ)跟醜陋的(de)GET參數說(shuō)拜拜。

自助管理後台,admin interface是(shì)Django裏比較吸引眼球的(de)一項contrib,讓你幾乎不(bù)用寫一行代碼就(jiù)擁有一個(gè)完整的(de)後台管理界面。

系統緊耦合,如果你覺得Django内置的(de)某項功能不(bù)是(shì)很好,想用喜歡的(de)第三方庫來(lái)代替是(shì)很難的(de),比如下面将要(yào / yāo)說(shuō)的(de)ORM、Template。要(yào / yāo)在(zài)Django裏用SQLAlchemy或Mako幾乎是(shì)不(bù)可能,即使打了(le/liǎo)一些補丁用上(shàng)了(le/liǎo)也(yě)會讓你覺得非常非常别扭。

Template功能比較弱,不(bù)能插入Python代碼,要(yào / yāo)寫複雜一點的(de)邏輯需要(yào / yāo)另外用Python實現Tag或Filter。關于(yú)模闆這(zhè)一點,一直以(yǐ)來(lái)争論比較多,最近有兩篇關于(yú)Python模闆的(de)比較有意思的(de)文章可供參考:

1 http://pydanny.blogspot.com/2010/12/stupid-template-languages.html(需FQ)
2 http://techspot.zzzeek.org/2010/12/04/in-response-to-stupid-template-languages/

URL配置雖然強大(dà),但全部要(yào / yāo)手寫,這(zhè)一點跟Rails的(de)Convention over configuration的(de)理念完全相左,高手和(hé / huò)初識Django的(de)人(rén)配出(chū)來(lái)的(de)URL會有很大(dà)差異。

數據庫schema都給你定好了(le/liǎo),這(zhè)樣問題就(jiù)來(lái)了(le/liǎo),比如很多網站要(yào / yāo)求email地(dì / de)址唯一,可schema裏這(zhè)個(gè)字段的(de)值不(bù)是(shì)唯一的(de),糾結是(shì)必須的(de)了(le/liǎo)。

總的(de)來(lái)說(shuō),Django大(dà)包大(dà)攬,用它來(lái)快速開發一些Web運用是(shì)很不(bù)錯的(de)。如果你順着Django的(de)設計哲學來(lái),你會覺得Django很好用,越用越順手;相反,你如果不(bù)能融入或接受Django的(de)設計哲學,你用Django一定會很痛苦,趁早放棄的(de)好。所以(yǐ)說(shuō)在(zài)有些人(rén)眼裏Django無異于(yú)仙丹, 但對有一些人(rén)來(lái)說(shuō)它又是(shì)毒藥且劇毒。

Pylons & TurboGears & repoze.bfg

除了(le/liǎo)Django另一個(gè)大(dà)頭就(jiù)是(shì)Pylons了(le/liǎo),因爲(wéi / wèi)TurboGears2.x是(shì)基于(yú)Pylons來(lái)做的(de),而(ér)repoze.bfg也(yě)已經并入Pylons project裏這(zhè)個(gè)大(dà)的(de)項目裏,後面不(bù)再單獨讨論TurboGears和(hé / huò)repoze.bfg了(le/liǎo)。

Pylons和(hé / huò)Django的(de)設計理念完全不(bù)同,Pylons本身隻有兩千行左右的(de)Python代碼,不(bù)過它還附帶有一些幾乎就(jiù)是(shì)Pylons禦用 的(de)第三方模塊。Pylons隻提供一個(gè)架子(zǐ)和(hé / huò)可選方案,你可以(yǐ)根據自己的(de)喜好自由的(de)選擇Template、ORM、form、auth等組件,系統高度可 定制。我們常說(shuō)Python是(shì)一個(gè)膠水語言(glue language),那麽我們完全可以(yǐ)說(shuō)Pylons就(jiù)是(shì)一個(gè)用膠水語言設計的(de)膠水框架。

選擇Pylons多是(shì)選擇了(le/liǎo)它的(de)自由,選擇了(le/liǎo)自由的(de)同時(shí)也(yě)預示着你選擇了(le/liǎo)噩夢:

學習噩夢,Pylons依賴于(yú)許多第三方庫,它們并不(bù)是(shì)Pylons造,你學Pylons的(de)同時(shí)還得學這(zhè)些庫怎麽使用,關鍵有些時(shí)候你都不(bù)知道(dào)你 要(yào / yāo)學什麽。Pylons的(de)學習曲線相對比Django要(yào / yāo)高的(de)多,而(ér)之(zhī)前Pylons的(de)官方文檔也(yě)一直是(shì)人(rén)批評的(de)對象,好在(zài)後來(lái)出(chū)了(le/liǎo)The Definitive Guide to Pylons這(zhè)本書,這(zhè)一局面有所改觀。因爲(wéi / wèi)這(zhè)個(gè)原因,Pylons一度被譽爲(wéi / wèi)隻适合高手使用的(de)Python框架。

調試噩夢,因爲(wéi / wèi)牽涉到(dào)的(de)模塊多,一旦有錯誤發生就(jiù)比較難定位問題處在(zài)哪裏。可能是(shì)你寫的(de)程序的(de)錯、也(yě)可能是(shì)Pylons出(chū)錯了(le/liǎo)、再或是(shì)SQLAlchemy出(chū)錯了(le/liǎo)、搞不(bù)好是(shì)formencode有bug,反正很淩亂了(le/liǎo)。這(zhè)個(gè)隻有用的(de)很熟了(le/liǎo)才能解決這(zhè)個(gè)問題。

Pylons和(hé / huò)repoze.bfg的(de)融合可能會催生下一個(gè)能挑戰Django地(dì / de)位的(de)框架。

Tornado & web.py

Tornado即是(shì)一個(gè)Web server(對此本文不(bù)作詳述),同時(shí)又是(shì)一個(gè)類web.py的(de)micro-framework,作爲(wéi / wèi)框架Tornado的(de)思想主要(yào / yāo)來(lái)源于(yú)Web.py,大(dà)家在(zài)Web.py的(de)網站首頁也(yě)可以(yǐ)看到(dào)Tornado的(de)大(dà)佬Bret Taylor的(de)這(zhè)麽一段話(他(tā)這(zhè)裏說(shuō)的(de)FriendFeed用的(de)框架跟Tornado可以(yǐ)看作是(shì)一個(gè)東西):

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

因爲(wéi / wèi)有這(zhè)層關系,後面不(bù)再單獨讨論Tornado。

一個(gè)框架精簡的(de)好處在(zài)于(yú)你可以(yǐ)聚焦在(zài)業務邏輯上(shàng),而(ér)不(bù)用太多的(de)去關心框架本身或受框架的(de)幹擾,同時(shí)缺點也(yě)很明顯,許多事情你得自己操刀上(shàng)。

我個(gè)人(rén)比較偏好這(zhè)種精簡的(de)框架,因爲(wéi / wèi)你很容易通過閱讀源碼弄明白整個(gè)框架的(de)工作機制,如果框架那一塊不(bù)是(shì)很合意的(de)話,我完全可以(yǐ)Monkey patch一下按自己的(de)要(yào / yāo)求來(lái)。

Bottle & Flask  

Bottle和(hé / huò)Flask作爲(wéi / wèi)新生一代Python框架的(de)代表,挺有意思的(de)是(shì)都采用了(le/liǎo)decorator的(de)方式配置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甚至所有的(de)代碼都在(zài)那一個(gè)兩千來(lái)行的(de).py文件裏。另外Flask和(hé / huò)Pylons一樣,可以(yǐ)跟Jinja2、SQLAlchemy之(zhī)類結合的(de)很好。

不(bù)過目前不(bù)管是(shì)Bottle還是(shì)Flask成功案例都還很少。

Quixote

之(zhī)所以(yǐ)要(yào / yāo)特别說(shuō)一下Quixote,是(shì)因爲(wéi / wèi)國(guó)内的(de)最大(dà)的(de)用Python開發的(de)網站“豆瓣網”是(shì)用Quixote開發的(de)。我隻簡單翻了(le/liǎo)一下源代碼,沒有做過研究,不(bù)發表評論,有經驗的(de)來(lái)補充下。我隻是(shì)在(zài)想,如果豆瓣網交到(dào)現在(zài)來(lái)開發,應該會有更多的(de)選擇。

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

最後關于(yú)框架選擇的(de)誤區

在(zài)框架的(de)選擇問題上(shàng),許多人(rén)很容易就(jiù)陷入了(le/liǎo)下面兩個(gè)誤區中而(ér)不(bù)自知:

1. 哪個(gè)框架最好——世上(shàng)沒有最好的(de)框架,隻有最适合你自己、最适合你的(de)團隊的(de)框架。編程語言選擇也(yě)是(shì)一個(gè)道(dào)理,你的(de)團隊Python最熟就(jiù)用Python好了(le/liǎo),如果最熟悉的(de)是(shì)Ruby那就(jiù)用Ruby好了(le/liǎo),編程語言、框架都隻是(shì)工具,能多、快、好、省的(de)幹完活就(jiù)是(shì)好東西。

2. 過分關注性能——其實大(dà)部分人(rén)是(shì)沒必要(yào / yāo)太關心框架的(de)性能的(de),因爲(wéi / wèi)你開發的(de)網站根本就(jiù)是(shì)個(gè)小站,能上(shàng)1萬的(de)IP的(de)網站已經不(bù)多了(le/liǎo),上(shàng)10萬的(de)更是(shì)很少很少。在(zài)沒有一定的(de)訪問量前談性能其實是(shì)沒有多大(dà)意義的(de),因爲(wéi / wèi)你的(de)CPU和(hé / huò)内存一直就(jiù)閑着呢。而(ér)且語言和(hé / huò)框架一般也(yě)不(bù)會是(shì)性能瓶頸,性能問題最常出(chū)現在(zài)數據庫訪問和(hé / huò)文件讀寫上(shàng)。 PHP的(de)Zend Framework是(shì)出(chū)了(le/liǎo)名的(de)慢,但是(shì)Zend Framework一樣有大(dà)站,如:digg.com;常被人(rén)說(shuō)有性能問題的(de)Ruby和(hé / huò)Rails,不(bù)是(shì)照樣可以(yǐ)開發出(chū)twitter嗎?再者現在(zài)的(de)硬 件、帶寬成本其實是(shì)很低的(de),特别有了(le/liǎo)雲計算平台後,人(rén)力成本才是(shì)最貴的(de),沒有上(shàng)萬的(de)IP根本就(jiù)不(bù)用太在(zài)意性能問題,流量上(shàng)去了(le/liǎo)花點錢買點服務器空間好了(le/liǎo), 簡單快速的(de)解決性能問題。

注:前面有網友質疑我“Quora是(shì)用Pylons開發的(de)”這(zhè)樣的(de)說(shuō)法不(bù)客觀,特說(shuō)明一下,這(zhè)裏所說(shuō)的(de)某個(gè)網站A是(shì)用B開發的(de),隻是(shì)指A主要(yào / yāo)或部分是(shì)由B開發的(de),大(dà)家就(jiù)不(bù)要(yào / yāo)再去糾結A還用C了(le/liǎo)。

相關案例查看更多