Django之WSGI ---- 第18章

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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章