Django自定义一个简单的中间件,并使用此中间件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012561176/article/details/84024073

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

用一个方法修饰器修饰这个中间件即可。

以上内容仅供学习参考,谢谢!

猜你喜欢

转载自blog.csdn.net/u012561176/article/details/84024073