中間件
開發django項目是,涉及全局相關功能,都可以使用中間件實現。
1.請求時,需要經過中間件,才能到達真正的django后端。
2.響應走的時候,也要經過中間件,才能出去。
?
依次經過里面的中間件進出,django自帶7個中間件。
?
必須掌握的:
1. process_request(self,request)a.請求來時,執行每個中間件的requesetb. 執行順序,配置文件中的注冊,由上到下c. 中間件沒有request,就跳過,執行下一個中間件d. 如果該方法放回HttpResponse對象,那么請求就不在執行下去,原路返回。process_request方法用于全局相關的條件限制。 2.process_response(self, request, response) return responsea. response 就是django后端返回的內容,需要return response也可以替換自定義的。 b. 響應走的時候經過每個中間件,從下往上。*django如果中間件request返回,就執行同級的response 返回。flask 也有中間件,但會全部執行。需要了解的:
3.process_view(self, request, view_func, view_args, view_kwargs)路由匹配成功后,視圖函數前。4.process_template_response(self,request,response)返回HttpRespone 有render屬性時候才觸發。5.process_exception(self, request, exception)當視圖函數報錯的時候自動觸發
如何定義中間件
1. 在項目名或應用名下,創建一個任意名稱的文件夾
2. 在文件夾內,創建一個任意名稱的py文件
3.在py文件內容,需要書寫類。(這個類必須繼承MiddlewareMixin)
? 然后在里面可以自定義5個方法,用幾個寫幾個
4. 將類的路徑以字符串形式注冊到配置文件夾中才能生效。
class Mymd1(MiddlewareMixin):def process_request(self,request):print('我是第一個自定義中間件里面的process_request方法')# return HttpResponse("我是第一個中間件返回的Httpresponse對象")def process_response(self,request,response):print('我是第一個中間件里面的process_reponse方法')return response # 就是后端返回給前端瀏覽器的響應數據def process_view(self,request,view_func,*args,**kwargs):print(view_func,args,kwargs)print('我是第一個中間件里面的process_view')def process_template_response(self,request,response):print('我是第一個中間件里面的process_template_reponse方法')return responsedef process_exception(self,request,exception):print('exception:',exception)print('我是第一個中間件里面的process_exception')
?
?
?
參考:https://www.cnblogs.com/guyouyin123/p/12193772.html
?