這篇文章主要介紹django處理請(qǐng)求的方法,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)是專(zhuān)業(yè)的宿松網(wǎng)站建設(shè)公司,宿松接單;提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行宿松網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
Django 和其他 Web 框架的 Http 處理的流程大致相同,web服務(wù)器軟件或者模塊(wsgiref)會(huì)把http 發(fā)送的請(qǐng)求封裝成了一個(gè) Request 對(duì)象, Django 處理一個(gè) Request 的過(guò)程首先是通過(guò)中間件,然后再通過(guò)默認(rèn)的 URL 方式進(jìn)行的. 我們可以在中間件(middleware)這個(gè)地方把所有 Request 攔截住,用我們自己的方式完成處理以后直接返回 Response.
加載配置
Django 的配置都在 “Project/settings.py” 中定義,可以是 Django 的配置,也可以是自定義的配置,并通過(guò) django.conf.settings 訪問(wèn),非常方便。
啟動(dòng)
最核心動(dòng)作的是通過(guò) django.core.management.commands.runfcgi 的 Command 來(lái)啟動(dòng),它運(yùn)行 django.core.servers.fastcgi 中的 runfastcgi , runfastcgi 使用了 flup 的 WSGIServer 來(lái)啟動(dòng) fastcgi 。而 WSGIServer 中攜帶了 django.core.handlers.wsgi 的 WSGIHandler 類(lèi)的一個(gè)實(shí)例,通過(guò) WSGIHandler 來(lái)處理由Web服務(wù)器(比如Apache,Nginx等)傳過(guò)來(lái)的請(qǐng)求,此時(shí)才是真正進(jìn)入 Django 的世界
處理 Request
當(dāng)有 HTTP 請(qǐng)求來(lái)時(shí), WSGIHandler 就開(kāi)始工作了,它從 BaseHandler 繼承而來(lái)。 WSGIHandler 為每個(gè)請(qǐng)求創(chuàng)建一個(gè) WSGIRequest 實(shí)例,而 WSGIRequest 是從 http.HttpRequest 繼承而來(lái)。接下來(lái)就開(kāi)始創(chuàng)建 Response 了。
創(chuàng)建Response
BaseHandler 的 get_response 方法就是根據(jù) request 創(chuàng)建 response , 而 具體生成 response 的動(dòng)作就是執(zhí)行 urls.py 中對(duì)應(yīng)的view函數(shù)了,這也是 Django可以處理“友好URL”的關(guān)鍵步驟,每個(gè)這樣的函數(shù)都要返回一個(gè) Response 實(shí)例。此時(shí)一般的做法是通過(guò) loader 加載 template 并生成頁(yè)面內(nèi) 容,其中重要的就是通過(guò) ORM 技術(shù)從數(shù)據(jù)庫(kù)中取出數(shù)據(jù),并渲染到 Template 中,從而生成具體的頁(yè)面了。
處理Response
Django 返回 Response 給 flup , flup 就取出 Response 的內(nèi)容返回給 Web 服務(wù)器,由后者返回給瀏覽器。
總之, Django 在 fastcgi 中主要做了兩件事:處理 Request 和創(chuàng)建 Response , 而它們對(duì)應(yīng)的核心就是“urls分析”、“模板技術(shù)”和“ORM技術(shù)”。
如圖所示,一個(gè) HTTP 請(qǐng)求,首先被轉(zhuǎn)化成一個(gè) HttpRequest 對(duì)象,然后該對(duì)象被傳遞給 Request 中間件處理,如果該中間件返回了Response,則直接傳遞給 Response 中間件做收尾處理。否則的話(huà) Request 中間件將訪問(wèn) URL 配置,確定哪個(gè) view 來(lái)處理,在確定了哪個(gè) view 要執(zhí)行,但是還沒(méi)有執(zhí)行該 view 的時(shí)候,系統(tǒng)會(huì)把 request 傳遞給 View 中間件處理器進(jìn)行處理,如果該中間件返回了Response,那么該 Response 直接被傳遞給 Response 中間件進(jìn)行后續(xù)處理,否則將執(zhí)行確定的 View 函數(shù)處理并返回 Response,在這個(gè)過(guò)程中如果引發(fā)了異常并拋出,會(huì)被 Exception 中間件處理器進(jìn)行處理。
以上是django處理請(qǐng)求的方法的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)頁(yè)題目:django處理請(qǐng)求的方法
當(dāng)前地址:http://vcdvsql.cn/article44/gdgphe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、電子商務(wù)、靜態(tài)網(wǎng)站、網(wǎng)站收錄、網(wǎng)站內(nèi)鏈、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)