這篇文章主要介紹django處理請求的方法,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
Django 和其他 Web 框架的 Http 處理的流程大致相同,web服務器軟件或者模塊(wsgiref)會把http 發送的請求封裝成了一個 Request 對象, Django 處理一個 Request 的過程首先是通過中間件,然后再通過默認的 URL 方式進行的. 我們可以在中間件(middleware)這個地方把所有 Request 攔截住,用我們自己的方式完成處理以后直接返回 Response.
加載配置
Django 的配置都在 “Project/settings.py” 中定義,可以是 Django 的配置,也可以是自定義的配置,并通過 django.conf.settings 訪問,非常方便。
啟動
最核心動作的是通過 django.core.management.commands.runfcgi 的 Command 來啟動,它運行 django.core.servers.fastcgi 中的 runfastcgi , runfastcgi 使用了 flup 的 WSGIServer 來啟動 fastcgi 。而 WSGIServer 中攜帶了 django.core.handlers.wsgi 的 WSGIHandler 類的一個實例,通過 WSGIHandler 來處理由Web服務器(比如Apache,Nginx等)傳過來的請求,此時才是真正進入 Django 的世界
處理 Request
當有 HTTP 請求來時, WSGIHandler 就開始工作了,它從 BaseHandler 繼承而來。 WSGIHandler 為每個請求創建一個 WSGIRequest 實例,而 WSGIRequest 是從 http.HttpRequest 繼承而來。接下來就開始創建 Response 了。
創建Response
BaseHandler 的 get_response 方法就是根據 request 創建 response , 而 具體生成 response 的動作就是執行 urls.py 中對應的view函數了,這也是 Django可以處理“友好URL”的關鍵步驟,每個這樣的函數都要返回一個 Response 實例。此時一般的做法是通過 loader 加載 template 并生成頁面內 容,其中重要的就是通過 ORM 技術從數據庫中取出數據,并渲染到 Template 中,從而生成具體的頁面了。
處理Response
Django 返回 Response 給 flup , flup 就取出 Response 的內容返回給 Web 服務器,由后者返回給瀏覽器。
總之, Django 在 fastcgi 中主要做了兩件事:處理 Request 和創建 Response , 而它們對應的核心就是“urls分析”、“模板技術”和“ORM技術”。

如圖所示,一個 HTTP 請求,首先被轉化成一個 HttpRequest 對象,然后該對象被傳遞給 Request 中間件處理,如果該中間件返回了Response,則直接傳遞給 Response 中間件做收尾處理。否則的話 Request 中間件將訪問 URL 配置,確定哪個 view 來處理,在確定了哪個 view 要執行,但是還沒有執行該 view 的時候,系統會把 request 傳遞給 View 中間件處理器進行處理,如果該中間件返回了Response,那么該 Response 直接被傳遞給 Response 中間件進行后續處理,否則將執行確定的 View 函數處理并返回 Response,在這個過程中如果引發了異常并拋出,會被 Exception 中間件處理器進行處理。
以上是django處理請求的方法的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。