云豆贴心提醒,本文阅读时间7分钟
WSGI的全称是Web Server Gateway Inte**ce,这是一个规范,描述了web server如何与web application交互、web application如何处理请求。该规范的具体描述在PEP 3333。注意,WSGI既要实现web server,也要实现web application。 实现了WSGI的模块/库有wsgiref(python内置)、werkzeug.serving、twisted.web等,具体可见Servers which support WSGI。 当前运行在WSGI之上的web框架有Bottle、Flask、Django等,具体可见Frameworks that run on WSGI。 WSGI server所做的工作仅仅是将从客户端收到的请求传递给WSGI application,然后将WSGI application的返回值作为响应传给客户端。WSGI applications 可以是栈式的,这个栈的中间部分叫做中间件,两端是必须要实现的application和server。
1.WSGI application接口 WSGI application接口应该实现为一个可调用对象,例如函数、方法、类、含__call__方法的实例。这个可调用对象可以接收2个参数: 一个字典,该字典可以包含了客户端请求的信息以及其他信息,可以认为是请求上下文,一般叫做environment(编码中多简写为environ、env); 一个用于发送HTTP响应状态(HTTP status)、响应头(HTTP headers)的回调函数。 同时,可调用对象的返回值是响应正文(response body),响应正文是可迭代的、并包含了多个字符串。 WSGI application结构如下: 2.Environment 下面的程序可以将environment字典的内容返回给客户端(environment.py): 浏览器(或者curl、wget等)访问http://127.0.0.1:8051/,可以看到environment的内容。 另外,浏览器请求一次后,environment.py就结束了,程序在终端中输出内容如下: 3.可迭代的响应 如果把上面的可调用对象application的返回值: 改成: 这会导致WSGI程序的响应变慢。原因是字符串response_body也是可迭代的,它的每一次迭代只能得到1 byte的数据量,这也意味着每一次只向客户端发送1 byte的数据,直到发送完毕为止。所以,推荐使用return [response_body]。 如果可迭代响应含有多个字符串,那么Content-Length应该是这些字符串长度之和: 4.解析GET请求 运行environment.py,在浏览器中访问http://localhost:8051/?age=10 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|