最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談五大Python Web框架

 更新時(shí)間:2017年03月20日 22:20:34   投稿:mdxy-dxy  
Python這么多框架,能挨個(gè)玩?zhèn)€遍的人不多,坦白的說(shuō)我也只用過(guò)其中的三個(gè)開(kāi)發(fā)過(guò)項(xiàng)目,另外一些稍微接觸過(guò),所以這里只能淺談一下,歡迎懂行的朋友們補(bǔ)充

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

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

雖然另一大腳本語(yǔ)言PHP也有不少框架,但遠(yuǎn)沒(méi)有Python這么夸張,也正是因?yàn)镻ython Web Framework(Python Web開(kāi)發(fā)框架,以下簡(jiǎn)稱Python框架)太多,所以在Python社區(qū)總有關(guān)于Python框架孰優(yōu)孰劣的話題,討論的時(shí)間跨度甚至長(zhǎng)達(dá)3-5年。

Python這么多框架,能挨個(gè)玩?zhèn)€遍的人不多,坦白的說(shuō)我也只用過(guò)其中的三個(gè)開(kāi)發(fā)過(guò)項(xiàng)目,另外一些稍微接觸過(guò),所以這里只能淺談一下,歡迎懂行的朋友們補(bǔ)充。

Django

Python框架雖然說(shuō)是百花齊放,但仍然有那么一家是最大的,它就是Django。要說(shuō)Django是Python框架里最好的,有人同意也有人 堅(jiān)決反對(duì),但說(shuō)Django的文檔最完善、市場(chǎng)占有率最高、招聘職位最多估計(jì)大家都沒(méi)什么意見(jiàn)。Django為人所稱道的地方主要有:

完美的文檔,Django的成功,我覺(jué)得很大一部分原因要?dú)w功于Django近乎完美的官方文檔(包括Django book)。

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

強(qiáng)大的URL路由配置,Django讓你可以設(shè)計(jì)出非常優(yōu)雅的URL,在Django里你基本可以跟丑陋的GET參數(shù)說(shuō)拜拜。

自助管理后臺(tái),admin interface是Django里比較吸引眼球的一項(xiàng)contrib,讓你幾乎不用寫(xiě)一行代碼就擁有一個(gè)完整的后臺(tái)管理界面。

系統(tǒng)緊耦合,如果你覺(jué)得Django內(nèi)置的某項(xiàng)功能不是很好,想用喜歡的第三方庫(kù)來(lái)代替是很難的,比如下面將要說(shuō)的ORM、Template。要在Django里用SQLAlchemy或Mako幾乎是不可能,即使打了一些補(bǔ)丁用上了也會(huì)讓你覺(jué)得非常非常別扭。

Template功能比較弱,不能插入Python代碼,要寫(xiě)復(fù)雜一點(diǎn)的邏輯需要另外用Python實(shí)現(xiàn)Tag或Filter。關(guān)于模板這一點(diǎn),一直以來(lái)爭(zhēng)論比較多,最近有兩篇關(guān)于Python模板的比較有意思的文章可供參考:

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配置雖然強(qiáng)大,但全部要手寫(xiě),這一點(diǎn)跟Rails的Convention over configuration的理念完全相左,高手和初識(shí)Django的人配出來(lái)的URL會(huì)有很大差異。

數(shù)據(jù)庫(kù)schema都給你定好了,這樣問(wèn)題就來(lái)了,比如很多網(wǎng)站要求email地址唯一,可schema里這個(gè)字段的值不是唯一的,糾結(jié)是必須的了。

總的來(lái)說(shuō),Django大包大攬,用它來(lái)快速開(kāi)發(fā)一些Web運(yùn)用是很不錯(cuò)的。如果你順著Django的設(shè)計(jì)哲學(xué)來(lái),你會(huì)覺(jué)得Django很好用,越用越順手;相反,你如果不能融入或接受Django的設(shè)計(jì)哲學(xué),你用Django一定會(huì)很痛苦,趁早放棄的好。所以說(shuō)在有些人眼里Django無(wú)異于仙丹, 但對(duì)有一些人來(lái)說(shuō)它又是毒藥且劇毒。

Pylons & TurboGears & repoze.bfg

除了Django另一個(gè)大頭就是Pylons了,因?yàn)門(mén)urboGears2.x是基于Pylons來(lái)做的,而repoze.bfg也已經(jīng)并入Pylons project里這個(gè)大的項(xiàng)目里,后面不再單獨(dú)討論TurboGears和repoze.bfg了。

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

選擇Pylons多是選擇了它的自由,選擇了自由的同時(shí)也預(yù)示著你選擇了噩夢(mèng):

學(xué)習(xí)噩夢(mèng),Pylons依賴于許多第三方庫(kù),它們并不是Pylons造,你學(xué)Pylons的同時(shí)還得學(xué)這些庫(kù)怎么使用,關(guān)鍵有些時(shí)候你都不知道你 要學(xué)什么。Pylons的學(xué)習(xí)曲線相對(duì)比Django要高的多,而之前Pylons的官方文檔也一直是人批評(píng)的對(duì)象,好在后來(lái)出了The Definitive Guide to Pylons這本書(shū),這一局面有所改觀。因?yàn)檫@個(gè)原因,Pylons一度被譽(yù)為只適合高手使用的Python框架。

調(diào)試噩夢(mèng),因?yàn)闋可娴降哪K多,一旦有錯(cuò)誤發(fā)生就比較難定位問(wèn)題處在哪里??赡苁悄銓?xiě)的程序的錯(cuò)、也可能是Pylons出錯(cuò)了、再或是SQLAlchemy出錯(cuò)了、搞不好是formencode有bug,反正很凌亂了。這個(gè)只有用的很熟了才能解決這個(gè)問(wèn)題。

Pylons和repoze.bfg的融合可能會(huì)催生下一個(gè)能挑戰(zhàn)Django地位的框架。

Tornado web.py

Tornado即是一個(gè)Web server(對(duì)此本文不作詳述),同時(shí)又是一個(gè)類web.py的micro-framework,作為框架Tornado的思想主要來(lái)源于Web.py,大家在Web.py的網(wǎng)站首頁(yè)也可以看到Tornado的大佬Bret Taylor的這么一段話(他這里說(shuō)的FriendFeed用的框架跟Tornado可以看作是一個(gè)東西):

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

因?yàn)橛羞@層關(guān)系,后面不再單獨(dú)討論Tornado。

一個(gè)框架精簡(jiǎn)的好處在于你可以聚焦在業(yè)務(wù)邏輯上,而不用太多的去關(guān)心框架本身或受框架的干擾,同時(shí)缺點(diǎn)也很明顯,許多事情你得自己操刀上。

我個(gè)人比較偏好這種精簡(jiǎn)的框架,因?yàn)槟愫苋菀淄ㄟ^(guò)閱讀源碼弄明白整個(gè)框架的工作機(jī)制,如果框架那一塊不是很合意的話,我完全可以Monkey patch一下按自己的要求來(lái)。

Bottle & Flask 

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一樣,都非常精簡(jiǎn),Bottle甚至所有的代碼都在那一個(gè)兩千來(lái)行的.py文件里。另外Flask和Pylons一樣,可以跟Jinja2、SQLAlchemy之類結(jié)合的很好。

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

Quixote

之所以要特別說(shuō)一下Quixote,是因?yàn)閲?guó)內(nèi)的最大的用Python開(kāi)發(fā)的網(wǎng)站“豆瓣網(wǎng)”是用Quixote開(kāi)發(fā)的。我只簡(jiǎn)單翻了一下源代碼,沒(méi)有做過(guò)研究,不發(fā)表評(píng)論,有經(jīng)驗(yàn)的來(lái)補(bǔ)充下。我只是在想,如果豆瓣網(wǎng)交到現(xiàn)在來(lái)開(kāi)發(fā),應(yīng)該會(huì)有更多的選擇。

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

最后關(guān)于框架選擇的誤區(qū)

在框架的選擇問(wèn)題上,許多人很容易就陷入了下面兩個(gè)誤區(qū)中而不自知:

1. 哪個(gè)框架最好——世上沒(méi)有最好的框架,只有最適合你自己、最適合你的團(tuán)隊(duì)的框架。編程語(yǔ)言選擇也是一個(gè)道理,你的團(tuán)隊(duì)Python最熟就用Python好了,如果最熟悉的是Ruby那就用Ruby好了,編程語(yǔ)言、框架都只是工具,能多、快、好、省的干完活就是好東西。

2. 過(guò)分關(guān)注性能——其實(shí)大部分人是沒(méi)必要太關(guān)心框架的性能的,因?yàn)槟汩_(kāi)發(fā)的網(wǎng)站根本就是個(gè)小站,能上1萬(wàn)的IP的網(wǎng)站已經(jīng)不多了,上10萬(wàn)的更是很少很少。在沒(méi)有一定的訪問(wèn)量前談性能其實(shí)是沒(méi)有多大意義的,因?yàn)槟愕腃PU和內(nèi)存一直就閑著呢。而且語(yǔ)言和框架一般也不會(huì)是性能瓶頸,性能問(wèn)題最常出現(xiàn)在數(shù)據(jù)庫(kù)訪問(wèn)和文件讀寫(xiě)上。 PHP的Zend Framework是出了名的慢,但是Zend Framework一樣有大站,如:digg.com;常被人說(shuō)有性能問(wèn)題的Ruby和Rails,不是照樣可以開(kāi)發(fā)出twitter嗎?再者現(xiàn)在的硬 件、帶寬成本其實(shí)是很低的,特別有了云計(jì)算平臺(tái)后,人力成本才是最貴的,沒(méi)有上萬(wàn)的IP根本就不用太在意性能問(wèn)題,流量上去了花點(diǎn)錢(qián)買(mǎi)點(diǎn)服務(wù)器空間好了, 簡(jiǎn)單快速的解決性能問(wèn)題。

注:前面有網(wǎng)友質(zhì)疑我“Quora是用Pylons開(kāi)發(fā)的”這樣的說(shuō)法不客觀,特說(shuō)明一下,這里所說(shuō)的某個(gè)網(wǎng)站A是用B開(kāi)發(fā)的,只是指A主要或部分是由B開(kāi)發(fā)的,大家就不要再去糾結(jié)A還用C了。

相關(guān)文章

最新評(píng)論

若羌县| 涟源市| 南和县| 安福县| 龙岩市| 齐齐哈尔市| 改则县| 金川县| 贡嘎县| 太谷县| 东光县| 永清县| 自贡市| 大冶市| 泌阳县| 浠水县| 宽城| 宜阳县| 玛沁县| 昆明市| 奉化市| 平顺县| 澄江县| 中西区| 治县。| 静宁县| 微山县| 定日县| 张北县| 仪征市| 丰顺县| 三河市| 怀宁县| 黄石市| 宜宾县| 维西| 明溪县| 自贡市| 惠来县| 娄底市| 平邑县|