当你在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。
相关推荐
一个简单的Python Web Server网关接口提升器 支持的标签和相应的Dockerfile链接 , , , , 如何使用这张图片 创建一个暴露名称应用程序的app.wsgi / app.py文件 from myproject import application 启动一个...
Django眼中的MVC,戏说WSGI(Python Web服务网关接口)
mod_wsgi的目标是实现一个简单的Apache模块,支持任何Python WSGI的接口的Python应用程序的托管。
在 Python 搭建Web站点之Web服务器与Web框架 中我们弄清楚了Web 服务器、Web 应用程序、Web...Python 社区当然也需要这样一套 API,来适配Web服务器和应用程序,这套 API 就是 WSGI(Python Web Server Gateway Interfac
windows下使用flask+wsgi+Apache部署python web, 博客地址 https://blog.csdn.net/Albert201605/article/details/115429256
mod_wsgi 是一个 Apache 模块,实现了 Python WSGI 接口服务
mod_wsgi各版本,包括cpu架构,python版本限制。用于apache的模块组件。
作为Web框架,是一个轻量级的Web框架,类似于另一个Python web框架Web.py,其拥有异步非阻塞IO 的处理方式。 作为Web服务器,Tornado 有较为出色的抗负载能力,官方用nginx反向代理的方式部署Tornado和其它 Python ...
06WSGI 07服务器支持WSGI 08服务器传递需要的字典参数 09 框架获取页面模板数据 10 添加配置文件、shell功能 简单服务器背景知识 02面向对象服务器 需要http协议的web服务器 03动态解析 回应的时候不止直接返回...
Django+Uwsgi+Nginx项目部署文档,在生产环境中使用WSGI作为python web的服务器,WSGI:全拼为Python Web服务器网关接口,Python Web服务器网关接口,是项目默认会生成一个wsgi.py文件,确定了设置模块 uWSGI实现了...
A tiny WSGI web framework(一个 WSGI Web 框架)(Python 3.5 ).
快速异步Python Web服务器(基于libev),类似于Medusa, Twisted, Apricot. 和Fapws并且兼容WSGI。
Python学习笔记-WSGI接口
”为了提高Python网络服务的可移植性,Python社区在PEP 333中提出了Web服务器网关接口(WSGI,Web Server Gateway Interface)。 为了提高Python网络服务的可移植性,Python社区在PEP 333中提出了Web服务器网关接口...
FeedMixer 是一个小型 Web 服务 (Python3/WSGI),它获取源 URL 列表并将它们组合成一个(Atom、RSS 或 JSON)源。适用于个人新闻聚合器、类似“星球”的网站等。 FeedMixer 公开了三个端点: /atom /RSS /json 当...
Zappa 极大的简化了在 AWS Lambda API 网关上发布所有 Python WSGI 应用。相当于是无服务器的部署运行你的 Python Web 应用
Python 内置的 WSGI 服务器.py
Linux+Django+Python+Wsgi配置过程
本文实例讲述了Python Web编程之WSGI协议。分享给大家供大家参考,具体如下: WSGI简介 Web框架和Wen服务器之间需要进行通信,如果在设计时它们之间无法相互匹配,那么对框架的选择就会限制对Web服务器的选择,这...