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

当你在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服务网关接口)--[转载]的更多相关文章

  1. WSGI——python web 服务器网关接口

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826084.html 一:服务器.服务器软件.应用程序(后台) 我们常说“服务器”,实际上服务器是一个很宽 ...

  2. Python Web 服务开发者: 第 1 部分

    Python Web 服务开发者: 第 1 部分 Python Web 服务世界 Python 的座右铭一向是“装备齐全”,这是指在安装该语言时会附带一大套标准库和功能程序.本文概述了在 Python ...

  3. 什么是 WSGI -- Python 中的 “CGI” 接口简介

    今天在 git.oschina 的首页上看到他们推出演示平台,其中,Python 的演示平台支持 WSGI 接口的应用.虽然,这个演示平台连它自己提供的示例都跑不起来,但是,它还是成功的勾起了我对 W ...

  4. 使用uwsgi 部署python web服务

    uwsgi, wsgi协议的一个很好的实现,源码在这里:https://github.com/unbit/uwsgi c语言编写,有兴趣可以研究下. 上DEMO: wsgi_server.py def ...

  5. Windows下搭建Apache+Django+Python Web服务环境

    最近在学Django,想用Apache搭建一个服务器环境,因此在网上看了好多资料,很多都是用Python2.6和Apache2.2搭建的环境,不过我还是想用Python35和Apache24来搭建,具 ...

  6. Nginx与python web服务配置(Uwsgi& FastCGI)

    Uwsgi start uswgi uwsgi --harakiri 360000 --body-read-warning=10000 --max-fd=65536 -b 1000000 --http ...

  7. Python web框架 flask

    Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...

  8. 一文读懂Python web框架和web服务器之间的关系

    我们都知道 Python 作为一门强大的语言,能够适应快速原型和较大项目的制作,因此被广泛用于 web 应用程序的开发中. 在面试的过程中,大家或多或少都被问到过这样一个问题:一个请求从浏览器发出到数 ...

  9. python web server gateway interface (wsgi ) notes

    前言: 注:如果需要得到支持批Python3.x以及包含了勘误表,附录,和说明的更新版规范,请查看PEP 3333 摘要: 这篇文档详细说明了一套在web服务器与Python web应用程序(web框 ...

随机推荐

  1. 几种开源SIP协议栈对比OPAL,VOCAL,sipX,ReSIProcate,oSIP

    随着VoIP和NGN技术的发展,H.323时代即将过渡到SIP时代,在H.323的开源协议栈中,Openh323占统治地位,它把一个复杂而又先进 的H.323协议栈展现在普通程序员的眼前,为H.323 ...

  2. head命令

    head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的开头至标准输出中,而 tail 想当然尔就是看档案的结尾. 1.命令格式: hea ...

  3. MFC之CToolTipCtrl按钮提示(消息捕获和消息传递)

    记得以前写对话框时,按钮直接有一个tips属性,可以添加默认值,不记得是C#还是啥了,今天忽然想给几个按钮添加提示信息,就捣鼓了一下. 头文件中创建CToolTipCtrl变量,然后在初始化时激活使用 ...

  4. Android取得电池的电量

    首先需要用到的是一个类继承BrocastReceiver 2 代码如下: public class Battery_Info extends BroadcastReceiver { @Override ...

  5. tomcat+redis实现session共享缓存

    一:linux下redis安装 1.wget http://download.redis.io/releases/redis-3.2.4.tar.gz 2.tar xzf redis-3.2.4.ta ...

  6. 聚聚科技---PHP开发笔试题及答案

    1. echo(), print(), print_r()的区别? echo是PHP语言结构, print和print_r是函数.语言结构没有返回值,函数可以有返回值(即便没有用)  . print( ...

  7. [原创]Python入门到简单网站目录扫描器编写(上)

    1.字符串,整型,浮点型.区别以及用法 |------字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串. 可以不严格的说,你可以认为引号包括的,都属于字符串 ...

  8. Github 开源编辑器 ATOM 已开放下载

    Update:2014-09-08 Atom 于5月6日正式开放下载(遗憾的是只有 MAC 版本),并且在 MIT 协义下开源,从界面可以看出,这款软件很像 Sublime Text,不过由于她的开源 ...

  9. CMA连续物理内存用户空间映射---(一)

    背景: 在多媒体和图像处理等应用中,经经常使用到大块内存,尤其是硬件编解码.须要内核分配大块的物理连续内存. 这里希望通过把从内核分配的连续物理内存映射到用户空间.在用户空间经过处理,又能够入队到驱动 ...

  10. JAVA程序猿怎么才干高速查找到学习资料?

    JAVA程序猿怎么才干高速查找到学习资料? JAVA学习资料在互联网上较为零散,并且大多是英文的.以下介绍3种方式,让程序猿能够高速地找到自己想要的资料. 一.导航站点: 有非常多类似hao123的站 ...