21 中介軟體

2022-09-12 12:54:26 字數 2399 閱讀 6477

一、中介軟體的定義

1.中介軟體是django請求/響應處理的鉤子框架,它是乙個輕量級的、低階的「外掛程式」系統,用於全域性改變django的輸入或輸出

2.中介軟體以類的形式體現

3.每個中介軟體元件負責做一些特定的功能,例如django包含乙個中介軟體元件 authenticationmiddleware,它使用會話將使用者與請求關聯起來

二、中介軟體編寫&註冊

註冊中介軟體

#

在專案路徑下建立middleware(自定義名稱)中介軟體資料夾

#settings.py 中需要註冊一下自定義的中介軟體

middleware =[

'middleware.py_name.calss_name

', #

中介軟體資料夾/py檔案/中介軟體類]#

配置為陣列,中介軟體被呼叫時先以先上到下,再由下到上的順序呼叫 / 進檢視之前是從上到下,進檢視之後是從下到上

編寫中介軟體

# 中介軟體類必須繼承自 

from django.utils.deprecation import middlewaremixin

class middleware_name(middlewaremixin):

...

#

中介軟體類必須實現下列五個方法中的乙個或多個

def process_request(self,request) #

執行路由之前被呼叫,在每個請求上呼叫,返回none或者httpresponse物件

def process_view(self,request,callback,acllback_args,acllback_kwargs) #

呼叫檢視之前被呼叫,在每個請求上呼叫,返回none或者httpresponse物件

def process_view(self,request,response) #

所有響應返回瀏覽器之前被呼叫,在每個請求上呼叫,返回httpresponse物件

def process_exception(self,request,exception) #

當處理過程中丟擲異常時呼叫,返回乙個httpresponse物件

def process_template_response(self,request,response) #

在檢視函式執行完畢且檢視返回的物件中包含render方法時被呼叫,該方法需要返回實現了render方法的響應物件

#中介軟體中的大多數方法在返回none時表示忽略當前操作進入下一事項,當返回httpresponse物件時表示此請求結束,直接返回給客戶端

實現示例

用中介軟體實現強制某個ip位址只能向/test開頭的位址傳送5次請求

request.meta['

remote_addr

'] #

可以得到遠端客戶端的位址

request.path_info #

可以得到客戶的訪問的路由資訊

#

中介軟體類

class

visitlimit(middlewaremixin):

#定義字典記錄訪問次數

visit_times ={}

defprocess_request(self, request):

#獲取訪問者ip位址

ip_address = request.meta['

remote_addr']

#獲取訪問路由

path_url =request.path_info

#如果是以/test位址開頭,返回none,繼續執行

ifnot re.match('

^/test

', path_url):

return

#儲存ip位址訪問次數

times =self.visit_times.get(ip_address, 0)

print('

ip', ip_address, '

已經訪問

', times)

#訪問次數+1

self.visit_times[ip_address] = times + 1

#判斷訪問次數

已經訪問過

' + str(times) + '

次,訪問被禁止

')

三、django請求流程圖

2 1 中介軟體的概念?

1 概念 中介軟體是乙個鉤子框架,在django中,在發起請求和響應資料的過程中,針對業務處理過程中的切面進行提取,用於在全域性修改django的輸入輸出。2 點 django中,有四個切入點 1 在瀏覽器到路由分發之前切入 process request self,request 2 路由分發到呼...

13 2 7 中介軟體

中介軟體顧名思義,是介於request與response處理之間的一道處理過程,相對比較輕量級,並且在全域性上改變django的輸入與輸出。因為改變的是全域性,所以需要謹慎實用,用不好會影響到效能。如果你想修改請求,例如被傳送到view中的httprequest物件。或者你想修改view返回的htt...

07 中介軟體

5 獲取的資料會交給最後乙個中介軟體的process response方法處理,然後依次向前面的中介軟體process response 6 在任一中介軟體的process request和process view方法中有返回值就會直接返回給process response 3 檢視函式 4 中介軟...