Django middleware中介軟體

2021-10-03 09:55:07 字數 3106 閱讀 1307

1.什麼是django中介軟體

2.django中介軟體的執行邏輯

3.實現自定義中介軟體

1.什麼是django中介軟體

django中介軟體是乙個類;

請求前後在合適的時機執行相應的方法;

可以通過在settings檔案中配置middleware_classes屬性來設定使用何種中介軟體。

middleware =

[# 安全中介軟體,處理請求應答安全的處理

'django.middleware.security.securitymiddleware'

,# 提供由狀態服務session中介軟體

'django.contrib.sessions.middleware.sessionmiddleware'

,'django.middleware.common.commonmiddleware'

,# 防止跨站偽造請求的中介軟體

# 'django.middleware.csrf.csrfviewmiddleware',

# django自帶的認證體系中介軟體

'django.contrib.auth.middleware.authenticationmiddleware'

,# 訊息中介軟體

'django.contrib.messages.middleware.messagemiddleware'

,'django.middleware.clickjacking.xframeoptionsmiddleware'

,]

gzip壓縮中介軟體,處理網頁請求/應答中檔案壓縮:gzipmiddleware

2.django中介軟體執行邏輯

如下圖,每個請求都會兩次經過配置的中介軟體,多個中介軟體之間存在執行順序。

3.實現自定義中介軟體

settings.py

# 專案啟動後自動例項化所有中介軟體

middleware =[.

..'ops.middlewaredemo.testmiddleware'

,'ops.middlewaredemo.test2middleware',...]

ops/middlewaredemo.py

class

testmiddleware

:def

__init__

(self, get_response)

: self.get_response = get_response

print

('build testmiddleware'

)def

__call__

(self, request)

:print

('testmiddleware before request.'

) response = self.get_reponse(request)

print

('testmiddleware after request.'

)return response

class

test2middleware

:def

__init__

(self, get_response)

: self.get_response = get_response

print

('build testmiddleware'

)def

__call__

(self, request)

:print

('test2 before request.'

) response = self.get_reponse(request)

print

('test2 after request.'

)return response

apis/views/test.py

def

helloworld

(request)

: data =

dict()

data[

'query'

]= request.get.get(

'info'

)# return jsonresponse(data=data, safe=

false

, status=

200)

#

配置路由後,啟動專案訪問web helloworld

從console輸出可知,順序執行,並且兩次進過middlewa

Django Middleware的幾個關鍵方法

django 處理乙個 request 的過程是首先通過中介軟體,然後再通過預設的 url 方式進行的。我們可以在 middleware 這個地方把所有request 攔截住,用我們自己的方式完成處理以後直接返回 response。因此了解中介軟體的構成是非常必要的。initializer init...

xpath 省略中間路徑 中間路徑方法

xpath 省略中間路徑 在我的職業生涯的大部分時間裡,我一直在從事軟體開發工作,因此,即使我不止一次涉足解決方案工程,我還是把自己視為軟體開發人員 或軟體架構師 這肯定會對我如何看待架構景觀產生影響,但是我會盡量保持客觀。從歷史上看,提供滿足業務需求的軟體解決方案有兩種方法 我的軟體開發人員方面以...

python屬於中介軟體嗎 python中介軟體

django的中介軟體是全域性範圍內處理django的請求和響應的框架級別的鉤子。定義from django.utils.deprecation importmiddlewaremixinclassmd1 middlewaremixin defprocess request self,request...