WSGI简介
WSGI:Web Server Gateway Interface是python web服务器网关接口。python程序只需要通过WSGI接口就可以创建一个web服务器,用于建立TCP连接、接收客户端的HTTP请求、解析HTTP请求、然后发送HTTP响应给客户端。这样开发者不用关注底层实现,只需要专注于生成的HTML内容即可。
-
WSGI 没有官方的实现, 因为WSGI更像一个协议. 只要遵照这些协议,WSGI应用(Application)就可以在任何服务器(Server)上运行, 反之亦然。WSGI标准被许多框架实现,其中包括现广泛使用的django框架。
-
WSGI是作为Web服务器与Web应用程序或应用框架之间的一种低级别的接口,以提升可移植Web应用开发的共同点。WSGI是基于现存的CGI标准而设计的。
WSGI接口编程
- 处理HTTP请求,发送HTTP响应给客户端
# wsgi_application.py
# application()函数就是符合WSGI标准的一个HTTP处理函数,它接收两个参数:
# environ:一个包含所有HTTP请求信息的dict对象;
# start_response:一个发送HTTP响应的函数。
# start_response()发送响应头,函数的返回值b'<h1>Hello, web!</h1>'将作为HTTP响应的Body发送给浏览器
def application(environ, start_response):
start_response("200 OKKK", [('Content-Type', 'text/html')])
response_body = '<h1>Hello, %s!</h1>' % (environ['PATH_INFO'][1:] or 'web')
# return [b'<h1>Hello, web!</h1>']
return [response_body.encode('utf-8')]
- 通过WSGI接口创建web服务器,接收HTTP请求
# wsgi_server.py
# web服务器接收HTTP请求
from wsgiref.simple_server import make_server
from wsgi_application import application
# 创建一个web服务器,IP地址为空,端口是8000,处理请求的函数是application
httpd = make_server('', 8000, application)
print('Server HTTP on port 8000...')
# 监听请求
httpd.serve_forever()
- 启动web服务器:python wsgi_server.py,然后浏览器中输入请求地址回车,查看Network:
- 备注:每一次更改application函数之后都要重启wsgi_server才生效,即使application和wsgi_server在同一个文件中仍然要重启服务器之后才生效
- 备注2:Django、Flask这些框架已经封装了wsgi,nginx这种是代理服务器,通常我们用uwsgi去处理程序内部的逻辑请求,用nginx去处理静态文件。
- 例如:下图的Django本地开发项目,启动服务器后,浏览器发起请求即可看到处理该请求的Server: WSGIServer/0.2 CPython/3.6.
-
下图是Flask本地开发项目,启动服务器后,浏览器发起请求即可看到处理该请求的Server: Werkzeug/1.0.1 Python/3.6.5
Flask框架封装的服务器
网友评论