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

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