python|探寻WSGI Application

简介: python|探寻WSGI Application

第一次了解pythonWSGI,可能描述的不太准确。

本篇文章所依赖的python环境为:

image.png



什么是WSGI


WSGI也称之为web服务器通用网关接口,全称是web server gateway interface。它定义了在pythonweb服务器与web应用程序之间应该如何通信并且处理http请求和响应的一个标准,注意,它只是一个协议,或者说是规范、标准,你也可以不按这个标准来,就像我们上一篇文章所写的web服务器那样。


WSGI 也分为应用程序 和 服务器网关, 其中我们熟知的Flask就是属于应用程序,uWSGIwsgiref属于服务器网关。


个人感觉,WSGI避免了造轮子,事情让更擅长的人去做,写服务器的,那就写符合WSGI规范的服务器就好,如果是写应用端的,就写符合WSGI规范应用就好。不用在重复的写轮子。

除此之外,WSGI还能与传统web服务器对接,例如: nginxapache等进行交互。

image.png

WSGI对应用程序规定了什么


WSGI中规定了其应用程序必须是一个可被调用的对象,通常来说,该对象是一个函数或者是一个类。 该对象必须接收2个参数,分别是environ字典 和 start_response函数,并且在对象结束前,应该调用start_response函数。而函数应该传参statusheaders,其中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函数,并且传入statusheaders值。



修改代码写出符合WSGI标准的web业务层


我们昨天写的代码,将返回一个Hello, Destined Person.,我们来看下,如果我们使用WSGI标准来写业务层,我们应该如何定义,并且如何调用WSGI服务器。

image.png


上述,我们引入了一个符合WSGI的服务器: wsgiref.simple_server,我们仅需按照WSGI的标准来编写业务层,也就是上述的application即可。我们在定义状态码的时候,估计将其设置为299 OK,在设置请求头的时候,设置了一个Serverpdudo_web_sites


我们使用curl请求一下服务器。

image.png


发现,哦,只要按照WSGI规范来书写,就可以很轻容的写一个简单的服务器。



总结

本篇文章,介绍了什么是WSGI以及现在程序员写pythonweb框架为什么要符合WSGI,最后我们写了一个业务函数,将其放到符合WSGI标准的服务器wsgiref上。文章写的很乱,不是很好。






相关文章
|
7月前
|
存储 安全 PHP
【100天精通Python】Day48:Python Web开发_WSGI网络服务器网关接口与使用
【100天精通Python】Day48:Python Web开发_WSGI网络服务器网关接口与使用
68 0
|
9月前
|
开发者 Python
【从零学习python 】88. WSGI接口详解:实现简单高效的Web开发
【从零学习python 】88. WSGI接口详解:实现简单高效的Web开发
57 0
|
9月前
|
Python
【从零学习python 】89. 使用WSGI搭建简单高效的Web服务器
【从零学习python 】89. 使用WSGI搭建简单高效的Web服务器
66 0
|
11月前
|
应用服务中间件 nginx 开发者
Python WSGI 规范
Python WSGI 规范
|
11月前
|
Python
python | 探寻python正则表达式-1
python | 探寻python正则表达式-1
113 0
|
11月前
|
运维 Python
python | 探寻python装饰器
python | 探寻python装饰器
57 0
|
11月前
|
运维 Python
python | 探寻python生成器
python | 探寻python生成器
92 0
|
11月前
|
运维 C语言 Python
python | 你知道for...in是底层原理是什么样的么?探寻python迭代器
python | 你知道for...in是底层原理是什么样的么?探寻python迭代器
75 0
python | 你知道for...in是底层原理是什么样的么?探寻python迭代器
|
Unix Ruby Python
Python:gunicorn用于UNIX的Python WSGI HTTP服务器
Python:gunicorn用于UNIX的Python WSGI HTTP服务器
92 0
|
Python
Python - WSGI 和 ASGI 服务器
Python - WSGI 和 ASGI 服务器
860 0