1. WSGI
WSGI即Web服务网关接口,这是一种协议。uwsgi 和 wsgiref 都是基于这个协议。Django 没有自己的 socket,默认使用的是 wsgiref
。wsgiref 由于性能原因,一般用于本地测试环境,uwsgi支持并发的一些设置可用于生产环境。
2. Django请求的生命周期
socket的作用是接收请求和响应请求。当用户向socket发送请求数据后,socket还需要对请求数据进行解析,根据请求数据来响应不同的内容。Django做的就是解析请求数据(需要从socket中获取请求相关信息),找到对应的响应内容(产出字符串),然后返回给socket,socket再发送响应数据给用户。Django不关心socket接发数据,只关心 从socket那里获取到请求数据并处理和返回请求数据给socket
。
def RunServer(environ, start_response):
"""
:param environ: 请求相关的所有操作
:param start_response:socket给Django的容器,Django最后要把容器给socket,可以用来方请求头
:return:
"""
# Django框架开始
# 中间件
# 路由系统
# 视图函数
# 数据库
# 模板引擎的渲染
# 最后把响应头+响应体通过socket返回给用户
start_response('200 OK', [('Content-Type', 'text/html')])
return [bytes('<h1>!!!</h1>', encoding='utf-8')]
if __name__ == '__main__':
"""
下面两句代码的操作是:创建socket服务端和等待客户端连接
"""
httpd = make_server('localhost', 8000, RunServer)
httpd.serve_forever()
Django部分源码,Django请求处理的入口点:
Django请求的生命周期流程:用户->WSGI->中间件->视图函数(数据库和模板进行渲染)->中间件->WSGI->用户,中间件和视图函数部分属于Django。