中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

淺談Python Web的五大框架

  說到web framework,Ruby的世界Rails一統(tǒng)江湖,而Python則是一個(gè)百花齊放的世界,各種micro-framework、framework不可勝數(shù),不完全列表見:http://wiki.Python.org/moin/WebFrameworks。雖然另一大腳本語言php也有不少框架,但遠(yuǎn)沒有Python這么夸張,也正是因?yàn)?a href=/itjie/Pythonjishu/ target=_blank class=infotextkey>Python web framework(Python web開發(fā)框架,以下簡稱Python框架)太多,所以在Python社區(qū)總有關(guān)于Python框架孰優(yōu)孰劣的話題,討論的時(shí)間跨度甚至長達(dá)3-5年。

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

  Django

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

  • 完美的文檔,Django的成功,我覺得很大一部分原因要?dú)w功于Django近乎完美的官方文檔(包括Django book)。
  • 全套的解決方案,Django象Rails一樣,提供全套的解決方案(full-stack framework + batteries included),基本要什么有什么(比如:cache、session、feed、orm、geo、auth),而且全部Django自己造,開發(fā)網(wǎng)站應(yīng)手的工具Django基本都給你做好了,因此開發(fā)效率是不用說的,出了問題也算好找,不在你的代碼里就在Django的源碼里。
  • 強(qiáng)大的URL路由配置,Django讓你可以設(shè)計(jì)出非常優(yōu)雅的URL,在Django里你基本可以跟丑陋的GET參數(shù)說拜拜。
  • 自助管理后臺(tái),admin interface是Django里比較吸引眼球的一項(xiàng)contrib,讓你幾乎不用寫一行代碼就擁有一個(gè)完整的后臺(tái)管理界面。

  而Django的缺點(diǎn)主要源自Django堅(jiān)持自己造所有的輪子,整個(gè)系統(tǒng)相對封閉,Django最為人詬病的地方有:

  • 系統(tǒng)緊耦合,如果你覺得Django內(nèi)置的某項(xiàng)功能不是很好,想用喜歡的第三方庫來代替是很難的,比如下面將要說的ORM、Template。要在Django里用SQLAlchemy或Mako幾乎是不可能,即使打了一些補(bǔ)丁用上了也會(huì)讓你覺得非常非常別扭。
  • Django自帶的ORM遠(yuǎn)不如SQLAlchemy強(qiáng)大,除了在Django這一畝三分地,SQLAlchemy是Python世界里事實(shí)上的ORM標(biāo)準(zhǔn),其它框架都支持SQLAlchemy了,唯獨(dú)Django仍然堅(jiān)持自己的那一套。Django的開發(fā)人員對SQLAlchemy的支持也是有過討論和嘗試的,不過最終還是放棄了,估計(jì)是代價(jià)太高且跟Django其它的模塊很難合到一塊。
  • Template功能比較弱,不能插入Python代碼,要寫復(fù)雜一點(diǎn)的邏輯需要另外用Python實(shí)現(xiàn)Tag或Filter。關(guān)于模板這一點(diǎn),一直以來爭論比較多,最近有兩篇關(guān)于Python模板的比較有意思的文章可供參考:
  1. http://pydanny.blogspot.com/2010/12/stupid-template-languages.html(需翻墻)
  2. http://techspot.zzzeek.org/2010/12/04/in-response-to-stupid-template-languages/
  • URL配置雖然強(qiáng)大,但全部要手寫,這一點(diǎn)跟Rails的Convention over configuration的理念完全相左,高手和初識Django的人配出來的URL會(huì)有很大差異。
  • 讓人糾結(jié)的auth模塊,Django的auth跟其它模塊結(jié)合緊密,功能也挺強(qiáng)的,就是做的有點(diǎn)過了,用戶的數(shù)據(jù)庫schema都給你定好了,這樣問題就來了,比如很多網(wǎng)站要求email地址唯一,可schema里這個(gè)字段的值不是唯一的,糾結(jié)是必須的了。
  • Python文件做配置文件,而不是更常見的ini、xml或yaml等形式。這本身不是什么問題,可是因?yàn)槔碚撋蟻碚fsettings的值是能夠動(dòng)態(tài)的改變的(雖然大家不會(huì)這么干),但這不是最佳實(shí)踐的體現(xiàn)。

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

  Django案例有disqus.combitbucket.org海報(bào)網(wǎng)等。

  Pylons & TurboGears & repoze.bfg

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

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

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

  • 學(xué)習(xí)噩夢,Pylons依賴于許多第三方庫,它們并不是Pylons造,你學(xué)Pylons的同時(shí)還得學(xué)這些庫怎么使用,關(guān)鍵有些時(shí)候你都不知道你要學(xué)什么。Pylons的學(xué)習(xí)曲線相對比Django要高的多,而之前Pylons的官方文檔也一直是人批評的對象,好在后來出了The Definitive Guide to Pylons這本書,這一局面有所改觀。因?yàn)檫@個(gè)原因,Pylons一度被譽(yù)為只適合高手使用的Python框架。
  • 調(diào)試噩夢,因?yàn)闋可娴降哪K多,一旦有錯(cuò)誤發(fā)生就比較難定位問題處在哪里。可能是你寫的程序的錯(cuò)、也可能是Pylons出錯(cuò)了、再或是SQLAlchemy出錯(cuò)了、搞不好是formencode有bug,反正很凌亂了。這個(gè)只有用的很熟了才能解決這個(gè)問題。
  • 升級噩夢,安裝Pylons大大小小共要安裝近20個(gè)Python模塊,各有各自的版本號,要升級Pylons的版本,哪個(gè)模塊出了不兼容的問題都有可能,升級基本上很難很難。至今reddit的Pylons還停留在古董的0.9.6上,SQLAlchemy也還是0.5.3的版本,應(yīng)該跟這條有關(guān)系。所以大家玩Pylons一定要結(jié)合virtualenv來玩,給自己留條后路,不然會(huì)死得很慘。

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

  Pylons的案例有reddit.comdropbox.comquora.com等。

  Tornado & web.py

  Tornado即是一個(gè)web server(對此本文不作詳述),同時(shí)又是一個(gè)類web.py的micro-framework,作為框架Tornado的思想主要來源于web.py,大家在web.py的網(wǎng)站首頁也可以看到Tornado的大佬Bret Taylor的這么一段話(他這里說的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。

  web.py的設(shè)計(jì)理念力求精簡(Keep it simple and powerful),總共就沒多少行代碼,也不像Pylons那樣依賴大量的第三方模塊,而是只提供的一個(gè)框架所必須的一些東西,如:URL路由、Template、數(shù)據(jù)庫訪問,其它的就交給用戶自己去做好了。

  一個(gè)框架精簡的好處在于你可以聚焦在業(yè)務(wù)邏輯上,而不用太多的去關(guān)心框架本身或受框架的干擾,同時(shí)缺點(diǎn)也很明顯,許多事情你得自己操刀上。
我個(gè)人比較偏好這種精簡的框架,因?yàn)槟愫苋菀淄ㄟ^閱讀源碼弄明白整個(gè)框架的工作機(jī)制,如果框架那一塊不是很合意的話,我完全可以Monkey patch一下按自己的要求來。

  早期的reddit是用web.py寫的,Tornado的案例有friendfeed.combit.lyquora.com和我的開源站點(diǎn)poweredsites.org等。

  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)

it知識庫淺談Python Web的五大框架,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 亚洲第1页 | av免费看在线 | 高清视频一区二区三区 | 国产在线精品免费 | 亚洲一区 中文字幕 | 91精品久久久久久久久 | 99re6热在线精品视频播放 | av在线播放国产 | 亚洲精品视频免费观看 | 亚洲精品一区二区三区四区高清 | 中文区中文字幕免费看 | 久久av一区二区三区 | 狠狠干2020| 国产精品久久久久久久久免费桃花 | 精品国产乱码久久久久久蜜退臀 | 欧美性jizz18性欧美 | 亚洲视频二区 | 欧美黄色一区 | 亚洲成人精品国产 | 日韩五月天 | 在线日韩欧美 | 亚洲精品国产精品国自产在线 | 日本一道本 | 久久久影院 | 精品国产一区二区三区免费 | 99热99| 国产欧美精品在线 | 99免费精品视频 | 桃花av在线| 国产女人与拘做视频免费 | 国产又色又爽又黄又免费 | 国产精品毛片一区二区三区 | 欧美中文在线 | 欧美日韩精品一区 | 国产在线观看一区二区 | 欧美一二三区 | 中文字幕日本一区二区 | 在线国产视频 | 精品粉嫩超白一线天av | 国产高清视频 | 欧美激情 一区 |