版权声明:本文为博主原创文章,未经博主允许不得转载。 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):
用一个方法修饰器修饰这个中间件即可。
以上内容仅供学习参考,谢谢!