當(dāng)你在Python的世界中冒險(xiǎn),突然遭遇一只Web怪獸,你會選擇什么武器對付它?在兵器譜上,下列兵器可謂名列前茅:
- Zope,厚重的長槍。較早出現(xiàn)的武器形態(tài)。該武器非常之強(qiáng)悍,無堅(jiān)不摧,無物不破。而且適合在軍隊(duì)中使用,排兵布陣集團(tuán)作戰(zhàn)效果更佳。然而要用好Zope要花上很長的時間,俗話說“月棍年刀一輩子槍”,可見其難度。
- TurboGears,威武的刀??煲饨貍渲?。其打造者熟知江湖規(guī)矩,頗有武林盟主之風(fēng),遇事通常拉幫結(jié)伙,分派任務(wù),決計(jì)不會把所有事情都攬?jiān)谧约荷砩稀?
- Django,飄逸的劍。非常內(nèi)斂,據(jù)說使用該武器的高手通常是獨(dú)行俠,他們的格言是:一劍在手,夫復(fù)何求?
- Web.py,小巧的匕首,刺客的最愛。常被用來執(zhí)行特殊任務(wù)。
- pylons,詭異的鞭, 傳言是Ruby世界的rails披上了Python的外衣,使用起來一定要小心,因?yàn)槟悴恢浪鼤p住敵人的脖子還是自己的脖子。
然而,我們今天要說的并不是這些武器,而是一種心法。畢竟武器的使用只是“招法”,而心法是招法的靈魂,心法一通,招法百通。這就是由馬里奧創(chuàng)造的“管道心法”,西方大陸稱其為WSGI(Python web服務(wù)網(wǎng)關(guān)接口)。
馬里奧是一位水管工,常年鉆在水管中苦心研究武術(shù)。馬里奧發(fā)現(xiàn),其實(shí)武器無所謂高下,最重要的是看使用武器的人和你要對付的對象。所謂一寸長,一份強(qiáng),如Zope威力強(qiáng)大,用來對付大型怪獸很合適,卻難免滯重;而一寸短,一份險(xiǎn),如web.py在應(yīng)付小型靈敏怪獸時有其獨(dú)特優(yōu)勢。所以單單評論武器的優(yōu)劣根本是空泛之談。于是乎,馬里奧在水管中冥思苦想十余載,終于發(fā)現(xiàn)了適用于所有武器的心法。掌握此心法,使用任何武器都能游刃有余。由于馬里奧是在水管中受到了啟發(fā),故命名為“管道心法”。本文作者在游歷時有幸發(fā)現(xiàn)此心法,并在“ 心內(nèi)求法 ”上流傳出來。傳說上古時期的大神道格拉斯·麥克羅伊在參與創(chuàng)世時,曾經(jīng)構(gòu)筑了稱為Pipeline的時空奇點(diǎn),用以連接stdout和stdin。馬里奧是否受此啟發(fā)我們不得而知,但“管道心法”確實(shí)與此有類似之處:
WSGI是馬里奧在探索管道的時候發(fā)現(xiàn)的一種連接件,它非常簡單,入口處提供一個start_response,用于回流(回調(diào),callback),入口會連接到出口的一個函數(shù),并傳遞environ字典和start_response作為參數(shù);而出口處的函數(shù)先是調(diào)用start_response并傳遞status和header,然后再返回content。由于這段心法有些拗口,馬里奧演示了唯一的招式,并聲明其實(shí)所有的招式都可以從這招中演化出來:
def application(environ, start_response):
status = ' 200 OK '
response_headers = [( ' Content-type ' , ' text/plain ' )]
start_response(status, response_headers)
return [ ' Hello ' ]
馬里奧還發(fā)現(xiàn),WSGI其實(shí)可以串聯(lián)起來,為了區(qū)分,馬里奧將下水管的入口叫做
web server
,只能接受外界的請求并調(diào)用下一段管件的函數(shù);中間的管件叫做
middleware
,既可以接收上一段管件的請求,又可以調(diào)用下一段管件的函數(shù);管道的終點(diǎn)叫做
web app
,只能被上一段管件調(diào)用。
為了避免后人誤解,馬里奧最后強(qiáng)調(diào):武器是死的,好的武器只有在合適的人手里才能發(fā)揮最大的威力,爭執(zhí)于武器的好壞毫無意義。
馬里奧最后將這段心法奉獻(xiàn)給了PEP,PEP將其編號為333。
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
