`

戏说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服务器网关接口提升程序

    一个简单的Python Web Server网关接口提升器 支持的标签和相应的Dockerfile链接 , , , , 如何使用这张图片 创建一个暴露名称应用程序的app.wsgi / app.py文件 from myproject import application 启动一个...

    cpp-modwsgi是一个Apache模块实现了PythonWSGI接口服务

    Web服务器网关接口(WSGI)是Python社区定义的一个标准接口,它定义了Web服务器与Python Web应用程序或框架之间的交互方式。通过WSGI,开发者可以专注于编写应用逻辑,而无需关心服务器的具体实现细节。 `mod_wsgi`...

    mod_wsgi python开发

    WSGI是Python Web应用的通用接口,让Web服务器与Web应用之间能进行通信。通过`mod_wsgi`,开发者可以将基于Python的Web应用无缝集成到Apache环境中,充分利用Apache的性能和稳定性。 **1. mod_wsgi的基本概念** - *...

    Django实战系列

    Django眼中的MVC,戏说WSGI(Python Web服务网关接口)

    基于Python的Web应用程序的Web服务器比较.md

    我们将从Python Web服务器网关接口(WSGI)入手,然后逐一分析几款流行的Web服务器特性,帮助读者理解其差异及应用场景。 ## Python Web服务器网关接口v1.0(WSGI) ### 背景问题 早期,在没有统一的标准接口时,...

    Python 搭建Web站点之Web服务器网关接口

    **Python 搭建Web站点之Web服务器网关接口(WSGI)详解** 在Python中构建Web站点时,Web服务器网关接口(Web Server Gateway Interface,简称WSGI)扮演着至关重要的角色。它是Python社区为了解决不同Web服务器与...

    windows下使用flask+wsgi+Apache部署python web.rar

    windows下使用flask+wsgi+Apache部署python web, 博客地址 https://blog.csdn.net/Albert201605/article/details/115429256

    快速异步PythonWeb服务器基于libev

    WSGI(Web Server Gateway Interface)是Python Web应用程序和Web服务器之间的一种标准接口。它定义了如何将Python应用程序的输出传递给服务器,以及如何将服务器接收到的HTTP请求传递给Python应用程序。对于开发者...

    python web接口开发与测试

    Python Web接口开发与测试是软件开发过程中的一个重要环节,它涉及到服务器端的API设计、客户端的调用以及全面的测试策略。在这个主题中,我们将深入探讨Python在构建和测试Web接口方面的能力,以及如何利用其丰富的...

    Python学习笔记-WSGI接口

    在Python web开发中,WSGI(Web Server Gateway Interface)是一种标准接口,用于web服务器与web应用之间的通信。这个接口定义了一种规范,使得不同的服务器和应用程序可以协同工作,提高了代码的可移植性和灵活性。...

    PythonWeb开发案例教程_源代码.zip

    "PythonWeb开发案例教程_源代码.zip"这个压缩包包含了整个教程的实践代码,这将帮助你更好地跟随教程的步伐,亲手操作每一个示例,加深对理论知识的理解。 Python Web开发主要依赖于一些强大的框架,如Django、...

    Python Web开发实战_python工程_python_web_

    2. **WSGI(Web Server Gateway Interface)**:Python标准的Web服务器接口,定义了Web服务器如何与Web应用程序交互。 3. **模板引擎**:如Jinja2,用于生成HTML页面,允许开发者将动态数据嵌入到静态模板中。 4. **...

    python项目练习-python3实现web服务器

    8. **扩展性**:虽然这个项目仅涉及基础Web服务器的实现,但了解如何扩展到更复杂的服务,比如使用WSGI(Web Server Gateway Interface)与Flask、Django等Web框架集成,或者通过多线程或异步I/O来处理并发请求,都...

    Python Web开发实战 董伟明

    常用的Python Web服务器包括WSGI(Web Server Gateway Interface)服务器如Gunicorn和uWSGI,以及ASGI(Asynchronous Server Gateway Interface)服务器如Daphne和Uvicorn。 4. 数据库操作:在Web开发中,数据库是...

    Python 200行代码实现简单的WebServer,还支持图片加载源码WSGI

    WSGI是Python Web应用的标准接口,它定义了Web服务器与Python应用程序之间的通信规范。这种规范使得不同的服务器和应用程序可以无缝对接,简化了Web开发流程。WSGI服务器接收HTTP请求,将其转化为调用Python应用的...

    55934-PythonWeb项目开发实战教程(Flask版)(微课版)-配套完整源代码.rar.rar

    《PythonWeb项目开发实战教程(Flask版)》是一本以Flask框架为核心的Web开发教程,旨在帮助读者深入理解和掌握使用Python进行Web开发的技术。Flask是一个轻量级的Web服务器网关接口(WSGI)Web应用框架,以其简洁、...

    测试python功能的web项目

    在这个项目中,Tomcat可能是用来运行Python编写的Web应用的一个环境,因为有些开发者可能会选择使用像Flask或Django这样的Python Web框架,并通过Wsgi(Web服务器网关接口)与Tomcat进行通信。这样,Python应用可以...

    Python-AtinyWSGIwebframework一个WSGIWeb框架Python35

    WSGI是Python中定义的一种标准接口,它使得Web应用和Web服务器之间能够有效地通信。这个框架的设计目标是简洁、高效,适合快速开发小型Web应用。 在Python的Web开发领域,WSGI已经成为构建Web服务的通用规范。它...

Global site tag (gtag.js) - Google Analytics