摘要:一般情優(yōu)下我們以在這里做一些校驗(yàn)比如戶登錄或者中是否有認(rèn)證頭之類的驗(yàn)證這個(gè)方法可以有兩種返回值或者,如果返回,那么接下米的處理方法只會(huì)執(zhí)行,其他方法將不會(huì)被執(zhí)行。它的返回值跟一樣,是或者,其邏輯也一樣。
一個(gè)middleware的例子
import time from django.urls import reverse from django.utils.deprecation import MiddlewareMixin class TimeItMiddleware(MiddlewareMixin): def process_request(self, request): return def process_view(self, request, func, *args, **kwargs): if request.path != reverse("index"): return None start = time.time() response = func(request) costed = time.time() - start print("process view: {:.2f}s".format(costed)) return response def process_excepttion(self, request, exception): pass def process_template_response(self, request, response): return response def process_response(self, request, response): return response
middleware中的函數(shù)有:
process_request
process_view
process_tmplate_response
process_response
process_exception
下面分別進(jìn)行介紹:
process_request:這是請(qǐng)求來(lái)到 middleware 中時(shí)講入的第一個(gè)方法。一般情優(yōu)下,我們以在這里做一些校驗(yàn),比如
戶登錄或者 HTTP 中是否有認(rèn)證頭之類的驗(yàn)證.這個(gè)方法可以有兩種返回值 HttpResnonse 或者None,如果返回 HttpResponse,那么接下米的處理方法只會(huì)執(zhí)行 process_response,其他方法將不會(huì)被執(zhí)行。這里需要注意的是,如果你的 middleware 是 settings 配置的 MIDDLEWARE 的第一個(gè),那么剩下的 middleware 也不會(huì)被執(zhí)行;如果返回 None,那么 Diango會(huì)繼續(xù)執(zhí)行其他方法。
這個(gè)方法是在 process_request 方法之后執(zhí)行的,參數(shù)如上面代碼所示,其中 func 就是我們將要執(zhí)行的 view 方法。因此,如果要統(tǒng)計(jì)一個(gè)view的執(zhí)行時(shí)間,可以在這里做。它的返回值跟 process_request 一樣,是HttpResponse 或者 None,其邏輯也一樣。如果返回 None,那么 Django 會(huì)幫你執(zhí)行 view 函數(shù),從而得到最終的 response。
Process_template_response:執(zhí)行完上面的方法,并且 Django 幫我們執(zhí)行完 view,拿到最終的 response 后,如果使用了模板的 response (這是指通過(guò) return render(request,"index.html",context={})方式返回的 response),就會(huì)來(lái)到這個(gè)方法中。 在這個(gè)方法中,我們可以對(duì) response 做一下操作,比如 Content-Type 設(shè)置,或者其他 header 的修改/增加。
process_response:當(dāng)所有流程都處理完畢后,就來(lái)到了這個(gè)方法。這個(gè)方法的邏輯跟 process_template_response是完全一樣的,只是后者是針對(duì)帶有模板的response的處理。
process_exception:上面的處理方法是按順序介紹的,而這個(gè)方法不太一樣。只有在發(fā)生異常時(shí),才會(huì)進(jìn)入這個(gè)方法。哪個(gè)階段發(fā)生的異常呢?
可以簡(jiǎn)單理解為在將要調(diào)用的 View 中出現(xiàn)異常(就是在process_view 的 func 函數(shù)中)或者返回的模板 response 在渲染時(shí)發(fā)生的異常。但是需要注意的是,如果你在process_view 中手動(dòng)調(diào)用了 func,就像我們上面做的那樣,就不會(huì)觸發(fā) process_exception 了。這個(gè)方法接收到異常之
后,可以選擇處理異常,然后返回一個(gè)含有異常信息的 HttpResponse,或者直接返回 None 不處理,這種情況下 Django會(huì)使用自己的異常模板。
以上節(jié)選自《Django企業(yè)開發(fā)實(shí)戰(zhàn)》 胡陽(yáng)著。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/45163.html
摘要:所以,我按照自己的邏輯總結(jié)了一下項(xiàng)目的運(yùn)行方式和對(duì)的基本處理流程。二請(qǐng)求處理流程和其他框架一樣,的處理流程基本類似接受,返回內(nèi)容。在中,中間件組件用字符串表示指向中間件類名的完整路徑。 之前在網(wǎng)上看過(guò)一些介紹Django處理請(qǐng)求的流程和Django源碼結(jié)構(gòu)的文章,覺得了解一下這些內(nèi)容對(duì)開發(fā)Django項(xiàng)目還是很有幫助的。所以,我按照自己的邏輯總結(jié)了一下Django項(xiàng)目的運(yùn)行方式和對(duì)Re...
摘要:中間件的分類請(qǐng)求期間返回期間如果需要自定義,在中添加對(duì)應(yīng)路徑的文件即可自定義方法需求場(chǎng)景在平時(shí)開發(fā)調(diào)試中,會(huì)遇到這樣那樣的報(bào)錯(cuò),我們自定義一個(gè)簡(jiǎn)單的中間件,的自定義步驟很簡(jiǎn)單,實(shí)現(xiàn)方法即可根據(jù)的和信息,調(diào)用的接口,當(dāng)報(bào)錯(cuò)時(shí)自動(dòng)搜索相關(guān)的答案 Django中間件MIDDLEWARE的分類: 請(qǐng)求期間: process_request(request) process_view(reque...
摘要:近期的項(xiàng)目,前端的是在上跑的,然后向我們后端的開發(fā)服務(wù)器進(jìn)行請(qǐng)求。那怎么去掉這個(gè)功能呢,我們現(xiàn)在就是要進(jìn)行跨域請(qǐng)求。這里里面有就直接進(jìn)入了,沒(méi)有下面的檢查了。所以我們只要自己給添加一個(gè)這樣的屬性就好了。最直接的方法還是去寫一個(gè)啊,哈哈。 近期的項(xiàng)目,前端的js是在localhost上跑的,然后向我們后端的開發(fā)服務(wù)器進(jìn)行請(qǐng)求。但是突然前端說(shuō)所有的post請(qǐng)求都報(bào)csrf校驗(yàn)錯(cuò)誤了,甚是奇...
同源策略:同源策略/SOP(Sameoriginpolicy)是一類承諾,由Netscape公司1995年引進(jìn)電腦瀏覽器,這是電腦瀏覽器最關(guān)鍵也最基本安全配置,如今全部適用JavaScript瀏覽器都是會(huì)使用這種對(duì)策。假如缺乏了同源策略,電腦瀏覽器很容易受XSS、CSFR等進(jìn)攻。 同宗就是指"協(xié)議書+網(wǎng)站域名+服務(wù)器端口"三個(gè)同樣,就算兩種不同的域名跳轉(zhuǎn)相同ip詳細(xì)地址,...
摘要:官方緩存系統(tǒng)介紹配置方式及內(nèi)部實(shí)現(xiàn)機(jī)制中大體分為三種,即針對(duì)全站的緩存配置針對(duì)視圖的緩存配置針對(duì)數(shù)據(jù)的緩存配置。本站采用數(shù)據(jù)庫(kù)全站緩存。每個(gè)頁(yè)面應(yīng)該被緩存的秒數(shù)重啟就可以體驗(yàn)緩存了。 最近博客增加了許多新功能,訪問(wèn)速度有所下降,在國(guó)內(nèi)某搜索引擎上查找的時(shí)候看到了這篇文字,簡(jiǎn)單明了,所以轉(zhuǎn)發(fā)過(guò)來(lái),雖不是原創(chuàng)但是希望能夠幫助更多的朋友。 Django 官方緩存系統(tǒng)介紹: https://d...
閱讀 2838·2021-11-25 09:43
閱讀 995·2021-10-11 10:57
閱讀 2492·2020-12-03 17:20
閱讀 3738·2019-08-30 14:05
閱讀 2430·2019-08-29 14:00
閱讀 2001·2019-08-29 12:37
閱讀 1674·2019-08-26 11:34
閱讀 3218·2019-08-26 10:27