除了上节介绍使用postman模拟出一个接口外。还可以使用python自带的wsgiref模块(中文意思是WSGI 参考模块)。
WSGI是专门为Python语言制定的web服务器与应用程序之间的网关接口规范,通俗的来说,只要一个服务器拥有一个实现了WSGI标准规范的模块(例如apache的mod_wsgi模块),那么任意的实现了WSGI规范的应用程序都能与它进行交互。
实际上WSGI将Web服务分成两个部分:服务器和应用程序。WGSI服务器只负责与网络相关的两件事:接收浏览器的HTTP请求、向浏览器发送HTTP应答;而对HTTP请求的具体处理逻辑,则通过调用WSGI App(应用程序)进行。WSGI工作流程如下图所示:【来源自网络】
下面具体看看各部分的作用
WSGI App
所有的 Python Web框架都要遵循 WSGI 协议,WSGI 中有一个非常重要的概念:每个Python Web应用都是一个可调用(callable)的对象。它规定了一个 application(environ, start_response) 的接口,server会调用 application,并传给它两个参数:environ 包含了请求的所有信息,start_response 是 application 处理完之后需要调用的函数,参数是状态码、响应头部还有错误信息。
如下一个简单的应用接口
def application(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return '<h1>Hello, web!</h1>'
上面的application()函数就是符合WSGI标准的一个HTTP处理函数,它接收两个参数:
• environ:一个包含所有HTTP请求信息的dict对象;
• start_response:一个发送HTTP响应的函数。
有了WSGI,我们关心的就是如何从environ这个dict对象拿到HTTP请求信息,然后构造HTML,通过start_response()发送Header,最后返回Body。整个application()函数本身没有涉及到任何解析HTTP的部分,也就是说,底层代码不需要我们自己编写,我们只负责在更高层次上考虑如何响应请求就可以了。
WSGI Server
上节已定义了WSGI App,那么这个application()函数怎么调用?
application()函数必须由WSGI服务器来调用。有很多符合WSGI规范的服务器,我们可以挑选一个来用。Python内置了一个WSGI服务器,这个模块叫wsgiref。
wsgi server可以理解为一个符合wsgi规范的web server,接收request请求,封装一系列环境变量,按照wsgi规范调用注册的wsgi app,最后将response返回给客户端。WSGI server必须要调用application,同时,从application的协议要求可知:
第一: WSGI server必须向application提供环境参数,因此,自身也必须能够获取环境参数。
第二: WSGI server接收application的返回值作为响应体。
则启动wsgi服务器的代码如下
# 从wsgiref模块导入:
from wsgiref.simple_server import make_server
# 创建一个服务器,IP地址为空,端口是8000,处理函数是application:
httpd = make_server(服务器ip地址, 8000, application) #如make_server('10.255.255.93',8500, application)
# 开始监听HTTP请求:
httpd.serve_forever()
测试
>>> import requests,json
>>>r=requests.get('http://10.255.255.93:8000')
>>>r.text
>>>'<h1>Hello, web!</h1>'
网友评论