戏说WSGI(Python Web服务网关接口)

系统 1622 0

当你在Python的世界中冒险,突然遭遇一只Web怪兽,你会选择什么武器对付它?在兵器谱上,下列兵器可谓名列前茅:

  • Zope,厚重的长枪。较早出现的武器形态。该武器非常之强悍,无坚不摧,无物不破。而且适合在军队中使用,排兵布阵集团作战效果更佳。然而要用好Zope要花上很长的时间,俗话说“月棍年刀一辈子枪”,可见其难度。
  • TurboGears,威武的刀。快意江湖必备之物。其打造者熟知江湖规矩,颇有武林盟主之风,遇事通常拉帮结伙,分派任务,决计不会把所有事情都揽在自己身上。
  • Django,飘逸的剑。非常内敛,据说使用该武器的高手通常是独行侠,他们的格言是:一剑在手,夫复何求?
  • Web.py,小巧的匕首,刺客的最爱。常被用来执行特殊任务。
  • pylons,诡异的鞭, 传言是Ruby世界的rails披上了Python的外衣,使用起来一定要小心,因为你不知道它会缠住敌人的脖子还是自己的脖子。

然而,我们今天要说的并不是这些武器,而是一种心法。毕竟武器的使用只是“招法”,而心法是招法的灵魂,心法一通,招法百通。这就是由马里奥创造的“管道心法”,西方大陆称其为WSGI(Python web服务网关接口)。

马里奥是一位水管工,常年钻在水管中苦心研究武术。马里奥发现,其实武器无所谓高下,最重要的是看使用武器的人和你要对付的对象。所谓一寸长,一份强,如Zope威力强大,用来对付大型怪兽很合适,却难免滞重;而一寸短,一份险,如web.py在应付小型灵敏怪兽时有其独特优势。所以单单评论武器的优劣根本是空泛之谈。于是乎,马里奥在水管中冥思苦想十余载,终于发现了适用于所有武器的心法。掌握此心法,使用任何武器都能游刃有余。由于马里奥是在水管中受到了启发,故命名为“管道心法”。本文作者在游历时有幸发现此心法,并在“ 心内求法 ”上流传出来。传说上古时期的大神道格拉斯·麦克罗伊在参与创世时,曾经构筑了称为Pipeline的时空奇点,用以连接stdout和stdin。马里奥是否受此启发我们不得而知,但“管道心法”确实与此有类似之处:

WSGI是马里奥在探索管道的时候发现的一种连接件,它非常简单,入口处提供一个start_response,用于回流(回调,callback),入口会连接到出口的一个函数,并传递environ字典和start_response作为参数;而出口处的函数先是调用start_response并传递status和header,然后再返回content。由于这段心法有些拗口,马里奥演示了唯一的招式,并声明其实所有的招式都可以从这招中演化出来:

      
        def
      
       application(environ, start_response):
      
status = ' 200 OK '
response_headers = [( ' Content-type ' , ' text/plain ' )]
start_response(status, response_headers)
return [ ' Hello ' ]

马里奥还发现,WSGI其实可以串联起来,为了区分,马里奥将下水管的入口叫做 web server ,只能接受外界的请求并调用下一段管件的函数;中间的管件叫做 middleware ,既可以接收上一段管件的请求,又可以调用下一段管件的函数;管道的终点叫做 web app ,只能被上一段管件调用。

为了避免后人误解,马里奥最后强调:武器是死的,好的武器只有在合适的人手里才能发挥最大的威力,争执于武器的好坏毫无意义。
马里奥最后将这段心法奉献给了PEP,PEP将其编号为333。

 

戏说WSGI(Python Web服务网关接口)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论