django的request請求需要首先經過中介軟體處理,再通過url查詢到對應的views函式進行處理。在settings的middleware_classes中
新增設定中介軟體進行啟用,大致原理如下圖所示:
在使用django框架進行開發的過程中,遇到乙個問題:要求對覺得多數頁面請求request進行使用者登入驗證,如果使用者沒有登入則跳轉回到登入頁面;
如果使用者登入了,則直接跳轉到新的鏈結頁面?
在django中提供了一種自定義裝飾器@login_required來實現驗證使用者登入:
1 # coding: utf-8但是這種方式有乙個不方便的地方:如果每新增乙個功能需要驗證登入,就需要新增@login_required來進行裝飾。如果有大量的功能需要進行登入驗證,2 from django.shortcuts import render
3 from django.contrib.auth.decorators import login_required
4 5 @login_required
6 def home(request):
7 return render(request, 'home.html')
工作量會增大。或者如果因為需求變化,刪除裝飾器,這種工作量會比較麻煩。
所以在學習過程中,想到使用django的中介軟體來進行登入驗證,在settings中增加引數,排除不需要登入的url,如:12
34exclude_url
=
(
'/login/'
,
'/logout'
,
)
然後再建立乙個中介軟體模組,將此中介軟體新增到middleware_classes中,定義process_request函式,對登入的url進行驗證:12
其中的exclude_path為不需要驗證登入的url(白名單),直接return進入響應的views.fun進行處理。
django的中介軟體是很方便的,當需要對所有的request進行相同的處理時,可以使用中介軟體進行處理,很方便。
Django 中介軟體 登入驗證
django的request請求需要首先經過中介軟體處理,再通過url查詢到對應的views函式進行處理。在settings的middleware classes中 新增設定中介軟體進行啟用,大致原理如下圖所示 在使用django框架進行開發的過程中,遇到乙個問題 要求對覺得多數頁面請求reques...
Django中介軟體(強制登入)
中介軟體 middleware 用於在http請求到達 檢視函式之前 和 檢視函式return之後 django會根據自己的規則在 合適的時機執行中介軟體中相應的方法。常用作view中冗餘功能的抽取,如每個頁面 或某些頁面 在訪問前強制登入。強制登入例項 定義中介軟體 可以新建乙個包 中介軟體中常用...
Django 中介軟體
django中的中介軟體是乙個輕量級 底層的外掛程式系統,可以介入django的請求和響應處理過程,修改django的輸入或輸出。中介軟體的執行過程如下圖所示 django在中介軟體中預置了五個方法,這五個方法的區別在於不同的階段執行,對輸入或輸出進行干預,方法如下 def init self pa...