一、中介軟體的定義
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 #
可以得到客戶的訪問的路由資訊
#三、django請求流程圖中介軟體類
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) + '
次,訪問被禁止
')
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 中介軟...