Django与WSGI
根据Python的惯例,Django不是一个完整的Web后端框架,它只负责开发WSGI应用程序 ,在生产环境中Django应用应当与一个WSGI服务器配套,由WSGI服务器负责网络通讯部分。
WSGI,全称 Web Server Gateway Interface,或者 Python Web Server Gateway Interface ,是为 Python 语言定义的Web服务器和Web应用程序之间的一种简单而通用的接口。
WSGI将Web服务分成两个部分:服务器和应用程序。WGSI服务器只负责与网络相关的两件事:接收浏览器的 HTTP请求、向浏览器发送HTTP应答;而对HTTP请求的具体处理逻辑,则通过调用WSGI应用程序进行。
实现一个WSGI应用,只需要满足3个要求:
- 是可调用的,比如是一个函数,或者是一个可调用类(具有__call__方法)的实例
- WSGI应用应当返回一个可迭代(iterable)的值,比如字符串列表
- WSGI应用在返回之前,应当调用WSGI服务器传入的start_response函数发送状态码和HTTP报文头
最小WSGI应用
一种最简单的满足WSGI规约的应用程序需要实现一个指定形式的函数:
from wsgiref.simple_server import make_server
def wsgi_app(environ,start_response):
start_response('200 OK',[('Context-Type','text/plain')])
return 'such a tiny wsgi app!'
httpd = make_server('0.0.0.0',80,wsgi_app)
httpd.serve_forever()
environ是一个包含全部HTTP请求信息的字典/Dict,由WSGI服务器解包HTTP请求生成。
运行示例代码,
1.思考一下,WSGI包含哪两个组成部分?
2.查看终端输出的environ内容,看看他包含了来自一个HTTP请求的哪些信息。