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