Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。自从WSGI被开发出来以后,许多其它语言中也出现了类似接口。
是CGI和FastCGI的升级版本。
1. WSGI工作原理
当服
- 客户端发起一个请求
- 服务器通过wsgi接口交给后台的APPLICATION处理
- APPLICATION处理完之后返回给服务器
2. 定义WSGI接口
接口格式:
def application(environ, start_response):
start_response("200 OK",[("Content-Type", "text/html")])
return [b"Hello World."]
定义一个函数,响应请求:
- environ:包含http所有请求的字典对象
- start_response:一个发送Http响应的函数,可以简单的理解为头部信息。
- return:返回的主体信息。
Python中可以使用wsgiref模块定义WSGI接口。
from wsgiref.simple_server import make_server
def app(environ, start_response):
"""application method"""
start_response("200 OK", [("Content-Type", "text/html;charset=utf-8")])
return [response.encode("utf-8")]
3. 运行WSGI服务
environ参数中有一些参数可以具体的识别,
wsgiref模块的官方文档网址如下:The WSGI Reference Library (telecommunity.com)
可以通过“PATH_INFO”识别请求的信息。
environ["PATH_INFO"]
然后根据不同的路径进行响应:
def app(environ, start_response):
"""application method"""
start_response("200 OK", [("Content-Type", "text/html;charset=utf-8")])
print("-"*20)
print(environ["PATH_INFO"])
print("-"*20)
file_name = environ["PATH_INFO"][1:] or "index.html"
file_path = f"""{ROOT_DIR}/zero.wcgiserver/views/{file_name}"""
print(f"FilePath : \r\n{file_path}")
try:
file = open(file_path, "rb")
except:
response = "File is not found."
else:
filedata = file.read()
file.close()
response = filedata.decode("utf-8")
print("-"*20)
print(f"Response : \r\n{response}")
return [response.encode("utf-8")]
4.运行结果