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。

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