進一步理解Django中的middleware

首先,Django文檔中是這樣描述的:Middleware is a framework of hooks into Django’s request/response processing. It’s a light, low-level 「plugin」 system for globally altering Django’s input or output.前端

也就是說中間件是一個鉤子框架能夠理解爲過濾器,能夠過濾發送到Django視圖層的請求,也能夠過濾視圖層發送給前端的響應.它是一個輕量級的底層插件系統,用途在全局修改Django的輸入或者輸出。瀏覽器

咱們在進行視圖編寫的時候會頻繁用到request.user,這個user屬性是怎麼來的呢?服務器

其實在Django默認提供的中間件AuthenticationMiddlewar,這個中間件在每一個view視圖函數執行以前,把user設置爲request的屬性
框架

 

Django 在中間件中預置了六個方法,這六個方法的區別在於不一樣的階段執行,對輸入或輸出進行幹
預,方法以下:函數

1.初始化:無需任何參數,服務器響應第一個請求的時候調用一次,用於肯定是否啓用當前中間件。spa

def __init__():
   pass插件

2.處理請求前:在每一個請求上調用,返回 None 或 HttpResponse 對象。
def process_request(request):
  passcode

3.處理視圖前:在每一個請求上調用,返回 None 或 HttpResponse 對象。
def process_view(request, view_func, view_args, view_kwargs):
  pass中間件

4.處理模板響應前:在每一個請求上調用,返回實現了 render 方法的響應對象。對象

def process_template_response(request, response):
  pass

5.處理響應後:全部響應返回瀏覽器以前被調用,在每一個請求上調用,返回 HttpResponse 對象。
def process_response(request, response):
  pass

6.異常處理:當視圖拋出異常時調用,在每一個請求上調用,返回一個 HttpResponse 對象。
def process_exception(request,exception):
  pass

 

並且

中間件的執行順序很是重要

在請求視圖被處理,中間件由上至下依次執行。

在請求視圖被處理,中間件由下至上依次執行。

相關文章
相關標籤/搜索