1. 程式人生 > >Django自定義一個簡單的中介軟體,並使用此中介軟體

Django自定義一個簡單的中介軟體,並使用此中介軟體

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):

用一個方法修飾器修飾這個中介軟體即可。

以上內容僅供學習參考,謝謝!