Django中介軟體的執行順序

2021-10-01 12:47:33 字數 1613 閱讀 7348

middleware並不是django所獨有的東西,在其他的web框架中也有這種概念。在django中,middleware可以滲入處理流程的四個階段:request,view,response和exception,相應的,在每個middleware類中都有process_request,process_view, process_response 和 process_exception這四個方法。你可以定義其中任意乙個活多個方法,這取決於你希望該middleware作用於哪個處理階段。每個方法都可以直接返回response物件。

middleware是在django basehandler的load_middleware方法執行時載入的,載入之後會建立四個列表作為處理器的例項變數:

(1)_request_middleware:process_request方法的列表

(2)_view_middleware:process_view方法的列表

(3)_response_middleware:process_response方法的列表

(4)_exception_middleware:process_exception方法的列表

django的中介軟體是在其配置檔案(settings.py)的middleware_classes元組中定義的。在middleware_classes中,中介軟體元件用字串表示:指向中介軟體類名的完整python路徑。

例如

middleware_classes =

['django.middleware.security.securitymiddleware'

,'django.contrib.sessions.middleware.sessionmiddleware'

,'django.middleware.common.commonmiddleware'

,'django.middleware.csrf.csrfviewmiddleware'

,'django.contrib.auth.middleware.authenticationmiddleware'

,'django.contrib.auth.middleware.sessionauthenticationmiddleware'

,'django.contrib.messages.middleware.messagemiddleware'

,'django.middleware.clickjacking.xframeoptionsmiddleware'

,]

django專案的安裝並不強制要求任何中介軟體,如果你願意,middleware_classes可以為空。中介軟體出現的順序非常重要:在request和view的處理階段,django按照middleware_classes**現的順序來應用中介軟體,而在response和exception異常處理階段,django則按逆序來呼叫它們。也就是說,django將middleware_classes視為view函式外層的順序包裝子:在request階段按順序從上到下穿過,而在response則反過來。以下這張圖可以更好地幫助你理解:

express koa 中介軟體執行順序

express和koa中介軟體是用於處理http請求和響應的,但是二者的設計思路確不盡相同。express中介軟體乙個接乙個的順序執行,習慣於將response響應寫在最後乙個中介軟體中 而koa的中介軟體執行順序是 洋蔥圈 模型。其實中介軟體也是一種 的思想 我們先看下express中介軟體的執行...

Koa 中介軟體的執行順序

const koa require koa koa console.log 1 await next 呼叫下乙個middleware console.log 5 console.log 2 await next 呼叫下乙個middleware console.log 4 console.log 3 ...

Django 中介軟體

django中的中介軟體是乙個輕量級 底層的外掛程式系統,可以介入django的請求和響應處理過程,修改django的輸入或輸出。中介軟體的執行過程如下圖所示 django在中介軟體中預置了五個方法,這五個方法的區別在於不同的階段執行,對輸入或輸出進行干預,方法如下 def init self pa...