中間件是Django請求/響應處理的掛鉤框架。這是一個輕量級的“插件”系統(tǒng),用于全局改變Django的輸入或輸出。每個中間件組件負責執(zhí)行一些特定的功能。例如,AuthenticationMiddleware使用會話將用戶與請求關聯(lián)起來。
一、中間件可以寫成如下所示的函數(shù):

來自于官方文檔
我們按照函數(shù)的形式自定義一個日志中間件,用來統(tǒng)計請求到響應的耗時,并在響應頭中返回,在應用目錄下新建一個logger_middleware.py文件,如下:

接著激活中間件,請將其添加到settings.py的中間件列表中:

在中間件中,每個中間件組件都由一個字符串表示:類或函數(shù)名的完整Python路徑。
Django安裝不需要任何中間件,中間件可以是空的,但強烈建議至少使用CommonMiddleware。
中間件的執(zhí)行是有順序的,中間件可以依賴于其他中間件。例如,AuthenticationMiddleware在會話中存儲經過身份驗證的用戶;因此,它必須在SessionMiddleware之后運行。
在請求階段,在調用視圖之前,Django按照中間件中定義的順序自上而下應用。官方解釋:可以將其視為洋蔥:每個中間件類都是一個“層”,視圖位于洋蔥的核心。如果請求通過洋蔥的所有層(每個層都調用get_response將請求傳遞到下一層),一直傳遞到核心的視圖,響應將通過每一層以相反的順序返回。
如果其中一層中斷,則接下去的其他層包括視圖也不會看到請求或響應,響應將僅通過請求傳入的層返回。
測試一下:

二、中間件也可以寫成類

來至于官方文檔
我們按照類的形式,也自定義一個一樣的日志中間件:

在settings.py中加入中間件即可:
