如果不使用中间件的话,对于需要登陆才能访问请求,需要在每个要登陆才能访问的视图函数前面加上@login_required(login_url='/login/')
装饰器,这样很不方便。用法可以看前面的博客Django 使用login函数登陆和注销
下面介绍一下使用中间件的方法
1、新建一个python文件,定义中间件,具体的解释见注释
from django.shortcuts import redirect,render
from django.utils.deprecation import MiddlewareMixin
import re
#白名单
#将登陆、登出、验证登陆请求设为白名单,不进行用户验证。
#这里设置了/static/静态文件,因为我这个项目静态文件没走nginx,如果静态文件通过nginx访问,可以不需要设置
exclued_path = ["/login/","/logout/","/login_ajax_check","/static/"]
#用来验证用户是否有权限登陆的中间件
class AuthMiddleWare(MiddlewareMixin):
def process_request(self, request):
url_path = request.path
#print(url_path)
#如果请求在白名单里,则通过,不进行操作
for each in exclued_path:
if re.match(each, url_path):
return
#如果未登陆,则调转到登陆页面,将请求的url作为next参数
if not request.user.is_authenticated:
return redirect("/login/?next={url_path}".format(url_path=url_path))
#如果已经登陆,则通过
else:
return
2、然后在setting文件MIDDLEWARE配置中加入该中间件的声明便可以了