django 中介軟體

2022-08-21 16:09:10 字數 3073 閱讀 4451

1, 做ip訪問頻率限制: 某些ip訪問伺服器的頻率過高,進行攔截, 比如每分鐘不能超過20次

2, url訪問過濾: 如果使用者訪問的是login(登入)或者register(註冊)之類的就放過,

如果訪問其他檢視, 需要檢測是不是有session認證, 已經有了就放行,

沒有就返回login, 這樣就省得在多個檢視函式上寫裝飾器了

中介軟體: 1,先走所有的process_request,

2,再找url,

3,再走所有的process_view,

4, 再繼續執行url對應的檢視函式

5, 如果執行url對應的檢視函式出錯, 就執行中介軟體process_exception(反方向執行)

4, 再走所有的process_response(反方向執行)

###  如何使用中介軟體
對所有請求和響應做一些統一處理

自定義中介軟體的流程

1, 在應用中建立乙個py檔案, 比如mymiddleware.py

2, 檔案中書寫內容如下, 先要引入模組

# 登入認證中介軟體

class loginauth(middlewaremixin):

# 白名單

white_list = ['/login/','register']

# 對請求處理用process_request, 如果請求通過了處理, 就return none(就是可以繼續往下執行), 如果沒有通過直接return httpresponse物件, 可以直接返回

def process_request(self,request):

current_path = request.path # 可以直接獲取到使用者請求的路徑

# 判斷使用者請求路徑是否在白名單中,

if current_path not in self.white_list:

status = request.session.get('is_login') # 獲取到session值

if not status: # 判斷, 如果沒有session值, 就給他字串提示,或者重定向去登入

# return httpresponse('去登入吧')

return redirect('login')

print('請求正常通行')# 如果獲取到session, 就給使用者請求的路徑通行

class md1(middlewaremixin):

def process_request(self,request):

print('md1-process_request')

# return httpresponse('ojbk') #process_requestzhong中如果returnhttpresponse物件, 那麼中介軟體執行到這裡直接返回

def process_response(self,request,response):

print(response)#print('md1-process_request')

# 獲取到httpresponse的最終返回值或者html檔案(都是位元組流型別), 可以decode成字串, 如果是html頁面, 則會展示html**

print(response.content.decode())

response['xx'] = 'oo'

# return httpresponse('ok') # 如果return是httpresponse物件, 那麼替換檢視函式中的返回值

return response #注意 使用process_response一定要return response, 否則報錯

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

print('md1-process_view')

print(view_func, view_args,view_kwargs)

print('md1-process_view2')

def process_exception(self,request,exception):

print('md1-process_exception')

print(exception, type(exception))# 收集到報錯資訊, 可以做處理, 預防伺服器故障

# 統一做異常處理

if isinstance(exception,valueerror):

return httpresponse('有函式報錯了,請及時處理',status=500)

class md2(middlewaremixin):

def process_request(self,request):

print('md2-procss_request')

def process_response(self,quest,response):

print('md2-process_response')

return response

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

print('md2-process_view')

def process_exception(self,request,exception):

print('md2-process_exception')

# 還有乙個中介軟體, 很少用到

Django 中介軟體

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

Django中介軟體

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

Django中介軟體

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