Django自定義一個簡單的中介軟體,並使用此中介軟體
阿新 • • 發佈:2019-01-26
1、在最近做的專案中,需要每個頁面訪問的時候判斷是否登入,沒登入的話就跳轉到登入頁面,因此抽出個公共方法,並自定義箇中間件是很有必要的,這樣就可以用註解方式去使用這個自定義的中介軟體,就如Django自帶的@login_required一樣。
2、因此首先在專案的目錄底下新建一個py檔案,這裡我是統一放在util工具包底下的,新建一個login_check.py,接著程式碼如下,主要邏輯程式碼大家根據自己專案需求來,下面只是個模板:
try: from django.utils.deprecation import MiddlewareMixin # Django 1.10.x except ImportError: MiddlewareMixin = object # Django 1.4.x - Django 1.9.x class LoginMiddleware(MiddlewareMixin): """ 自定義登入攔截中介軟體 """ def process_request(self, request): """ session是否登入校驗檢查 :param request: :return: """
在底下的process_request函式底下便可以寫相關的邏輯,當然自定義中介軟體還有很多函式實現,如接著如何引用呢?
3、接著引用這個底下的自定義中介軟體:
from utils.login_check import LoginMiddleware
@LoginMiddleware
def user_list(request):
這樣便可以引用這個簡單的自定義中介軟體了,但是,還有下面的問題。
4、如果在view底下的class定義的話就會有以下的問題,錯誤的具體程式碼如下:
from django.views import View @LoginMiddleware class AddUser(View):
此時會報一個錯誤:
path('user_add/', AddUser.as_view(), name='user_add'),
AttributeError: 'LoginMiddleware' object has no attribute 'as_view'
因為在對應的url底下配置的路徑是由AddUser.as_view(),此時LoginMiddleware沒有這個屬性值as_view,解決辦法很簡單:
from django.views import View from django.utils.decorators import method_decorator @method_decorator(LoginMiddleware, name='dispatch') class AddUser(View):
用一個方法修飾器修飾這個中介軟體即可。
以上內容僅供學習參考,謝謝!