Python WSGI接口
WSGI(Web服务器网关接口)Web服务器网关接口
首先明确一个概念,WSGI不是蟒的模块,不是函数,也不是对象,只是一种协议;如果遵照此协议,那么使用该协议编写的应用程序可以和任意一个遵照此协议的服务器进行搭配,组合成一个完整的服务器。
-
为什么需要使用WSGI接口?
我们都知道在HTTP协议中:
①首先浏览器发送一个请求给服务器;
②然后服务接受这个请求,并根据请求头中的内容来判断需要响应的内容;
③服务器发送响应,并将内容放在响应体中
④浏览器读取该响应体中的内容,并将此内容显示到浏览器上作为一个开发人员,如果想要开发一个网站,那么就必须从HTTP协议开始,编写服务器,处理各种底层的请求,从这些请求中返回响应,这将会占用大量的时间,去熟悉各种HTTP底层的代码,而WSGI就是将这些分离开来。作为开发人员,将只用集中精力的去编写动态网页,和相应的处理逻辑,这就是应用。而服务器就是专门处理各种底层HTTP代码。
-
WSGI包括两个部分,和一个可选的中间层
- WSGI服务器,该服务器主要有以下功能
用来接受浏览器发送的请求请求,并将这些请求发送给WSGI应用程序
用来接收应用返回的响应响应,并将这些响应发送给客户端
-
WSGI应用程序,该应用主要由以下功能
- 组成
WSGI application必须是一个可调用的对象,这个对象可以是一个函数,一个类,这个类必须实现
__call__()
方法或者一个类对象。- 参数:
一个参数是
environ
,这是一个包含所有HTTP请求头信息的字典一个参数是
start_response(response_code,headers)
函数,这是一个向服务器发送HTTP响应的函数,这个函数也具有两个参数,response_code
是响应的状态码,headers
是响应头信息,是一个由(响应头,响应值)组成的列表例子:response_code:
200 OK
例子:
[('Content-Type','text/html')]
-
WSGI中间件
中间层介于服务器和应用程序之间,对于有服务器来说它是一个应用程序,对于应用程序来说,它是一个服务器
所以在使用中间层时,必须要用同时实现与服务器应用程序之间的对接
WSGI代码
from wsgiref.simple_server import make_server
# 定义WSGI应用程序,传入envrion和start_response()函数
def application(envrion, start_response):
# 调用start_response函数,将响应头信息写入到缓存中,此时并没有发送
start_response('200 OK',[('Content-Type','text/html')])
# 返回响应体中的内容,和响应头一起组成完整的响应报文
return [b'hello']
server = make_server('127.0.0.1',8888,application)
server.serve_forever()
- 剩下的内容以后再补