浅析Python WSGI的使用
作者:真的不能告诉你我的名字
第一次了解python
的WSGI
,可能描述的不太准确。
本篇文章所依赖的python
环境为:
什么是WSGI
WSGI
也称之为web
服务器通用网关接口,全称是web server gateway interface
。它定义了在python
中web
服务器与web
应用程序之间应该如何通信并且处理http
请求和响应的一个标准,注意,它只是一个协议,或者说是规范、标准,你也可以不按这个标准来,就像我们上一篇文章所写的web
服务器那样。
WSGI
也分为应用程序 和 服务器网关, 其中我们熟知的Flask
就是属于应用程序,uWSGI
、wsgiref
属于服务器网关。
个人感觉,WSGI
避免了造轮子,事情让更擅长的人去做,写服务器的,那就写符合WSGI
规范的服务器就好,如果是写应用端的,就写符合WSGI
规范应用就好。不用在重复的写轮子。
除此之外,WSGI
还能与传统web
服务器对接,例如: nginx
、apache
等进行交互。
WSGI对应用程序规定了什么
WSGI
中规定了其应用程序必须是一个可被调用的对象,通常来说,该对象是一个函数或者是一个类。 该对象必须接收2个参数,分别是environ
字典 和 start_response
函数,并且在对象结束前,应该调用start_response
函数。而函数应该传参status
和headers
,其中status
应该定义响应状态码以及短语,headers
应该定义响应头。
如果用代码来阐述的话,应该是这样来写的:
def application(environ, start_response): status = '200 OK' headers = [('Content-type', 'text/plain')] start_response(status, headers) return [b'Hello, world!']
其中,application
是一个可迭代的对象,接受了2个参数,一个是environ
,其类型是字典,还是一个是start_response
,其类型是函数,在application
结束前,应该调用start_response
函数,并且传入status
和headers
值。
修改代码写出符合WSGI标准的web业务层
我们昨天写的代码,将返回一个Hello, Destined Person.
,我们来看下,如果我们使用WSGI
标准来写业务层,我们应该如何定义,并且如何调用WSGI
服务器。
import wsgiref.simple_server def application(environ,start_response): status = "299 OK" headers = [("Content-type","text/html"),("Server","pdudo_web_sites")] start_response(status ,headers) return [b'Hello, Destined person."] s = wsgiref.simple_server.make_server('',8888,application) s .serve_forever()
上述,我们引入了一个符合WSGI
的服务器: wsgiref.simple_server
,我们仅需按照WSGI
的标准来编写业务层,也就是上述的application
即可。我们在定义状态码的时候,估计将其设置为299 OK
,在设置请求头的时候,设置了一个Server
为pdudo_web_sites
。
我们使用curl
请求一下服务器。
发现,哦,只要按照WSGI
规范来书写,就可以很轻容的写一个简单的服务器。
总结
本篇文章,介绍了什么是WSGI
以及现在程序员写python
的web
框架为什么要符合WSGI
,最后我们写了一个业务函数,将其放到符合WSGI
标准的服务器wsgiref
上。文章写的很乱,不是很好。
到此这篇关于浅析Python WSGI的使用的文章就介绍到这了,更多相关Python WSGI内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!