django中介軟體

2021-10-03 00:08:45 字數 3056 閱讀 7464

process_request⽅法

在執⾏路由前被調⽤,每個請求上都會調⽤,不主動進⾏返回或返回httpresponse物件

process_request(self, request)

引數:request,是⼀個httprequest請求物件

返回值:返回none會繼續調⽤下⼀個中介軟體的process_request⽅法,返回

httpresponse,則執⾏⾃⼰process_response

process_view⽅法

調⽤檢視之前執⾏,每個請求都會調⽤,不主動進⾏返回或返回httpresponse物件

process_view(self,request,view_func,view_args,view_kwargs)

引數: request:httprequest物件

view_func:是⼀個即將調⽤的檢視函式,不是字串函式名

view_args:傳遞給檢視函式的位置引數

view_kwargs:傳遞給檢視函式的關鍵字引數

返回值:如果返回none,會繼續執⾏處理此請求,然後調⽤下⼀個中介軟體的

process_view,直⾄執⾏檢視函式;如果返回httpresponse,則直接執⾏最

後⼀個中介軟體的process_response

process_template_response⽅法

在檢視剛好執⾏完後進⾏調⽤,只要檢視返回⼀個render⽅法返回的

物件,就會調⽤process_template_response,不主動進⾏返回或返回httpresponse物件

process_template_response(self, request, response)

引數:request httprequest物件

response 是⼀個由django view或者中介軟體返回的

templateresponse 物件

返回值: 必須返回⼀個render⽅法執⾏後的response物件,它可以修改

view中返回的 response.template_name 和 response.context_data,

或者為view返回的模板增加⼀個商標等等。你不需要明確的渲染響應,當所

有的temp

process_response

所有響應返回瀏覽器之前調⽤,每個請求都會調⽤,返回httpresponse物件

process_response(self,request,response)

引數:request httprequest物件

response httpresponse物件

返回值:必須是httpresponse物件

process_exception

當檢視丟擲異常時調⽤,返回none或返回httpresponse物件

process_exception(self,request,exception)

引數:request: httprequest 物件

exception:view函式中raise的exception物件,當view 函式raise

⼀個exception的時候調⽤process_exception

可實現功能

統計⿊名單

⽩名單界⾯友好化(捕獲異常)

實現import json

# ⾃定義中介軟體

class mymiddleware(middlewaremixin):

def process_request(self,request):

print(request.meta['remote_addr'])

# ⽹站統計

#⿊名單

# if request.meta['remote_addr'] in blacklist:

# return httpresponse("本站不歡迎你")

#登入判斷

# username = request.session.get('username')

# path = request.path #請求路徑

# print(username,path)

# 統⼀返回json資料

def process_response(self,request,response):

print("response")

#型別判斷

if isinstance(response,(dict,list)):

result = json.dumps(response)

# 必須返回資料

# 對管理員展示錯誤⻚⾯,⼀般⽤戶只能看到404,500等⻚⾯

ip = request.meta.get('remote_addr')

if ip == '127.0.0.1':

return

technical_500_response(request,*sys.exc_info())

啟⽤中介軟體

在settings中進⾏配置,middleware中新增:模組名.middleware.類名

middleware = [

.......

]

Django 中介軟體

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

Django中介軟體

給檢視函式加裝飾器判斷使用者是否登入,把沒有登入的請求跳轉到登入頁面,我們通過給幾個特定檢視函式加裝飾器實現了這個需求,但是這樣做比較繁瑣,用django中的中介軟體會比較簡潔 什麼是中介軟體 中介軟體是幫助我們再檢視函式執行之前和執行之後都可以做一些額外的操作,它本質上就是乙個自定義類,類中定義了...

Django中介軟體

什麼是中介軟體?django中的中介軟體是乙個輕量級 底層的外掛程式系統,可以介入django的請求和響應處理過程,修改django的輸入或輸出。中介軟體的設計為開發者提供了一種無侵入式的開發方式,增強了django框架的健壯性。我們可以使用中介軟體,在django處理檢視的不同階段對輸入或輸出進行...