Python 的很多知名的Web框架(例如Flask, Django)实际上都是遵从了这个wsgi模型。
from wsgiref.simple_server import make_server
def demo_app(environ,start_response):
from io import StringIO
stdout = StringIO()
print("Hello world!", file=stdout)
print(file=stdout)
h = sorted(environ.items())
for k,v in h:
print(k,'=',repr(v), file=stdout)
start_response("200 OK", [('Content-Type','text/plain; charset=utf-8')])
return [stdout.getvalue().encode("utf-8")]
if __name__ == '__main__':
httpd = make_server('127.0.0.1', 8000, demo_app)
httpd.serve_forever()
# with make_server('', 8000, demo_app) as httpd:
# sa = httpd.socket.getsockname()
# print("Serving HTTP on", sa[0], "port", sa[1], "...")
# import webbrowser
# webbrowser.open('http://localhost:8000/xyz?abc')
# httpd.handle_request() # serve one request, then exit
WSGI Server作用
- 监听HTTP服务端口(TCPServer, 80端口)
- 接收浏览器端HTTP请求并解析封装成environ环境数据
- 负责调用应用程序,将environ和start_response方法传入
- 将应用程序响应的正文封装成HTTP响应报文返回浏览器端
WSGI APP要求
- 应用程序是一个可调用对象(函数、类都可以)
- 这个可调用对象应该接收两个参数(environ, start_response)
- 调用start_response
- 最后必须返回一个可迭代对象
网友评论