原理:使用中间件对访问的url进行过滤,未通过的url跳转到登录页面
1、在模块中,新建中间件文件 my_middleware.py(自定义)
1 from django.http import HttpResponseRedirect 2 from django.utils.deprecation import MiddlewareMixin 3 4 from webShop99 import settings 5 import re 6 # 未登录可访问的页面或正则 7 EXEMPT_URLS = [settings.LOGIN_URL.lstrip('/'), ] 8 9 if hasattr(settings, 'LOGIN_EXEMPT_URLS'): 10 EXEMPT_URLS.extend([expr.lstrip('/') for expr in settings.LOGIN_EXEMPT_URLS]) 11 12 13 class userVaild(MiddlewareMixin): 14 def process_request(self, request): 15 if 'user' not in request.session or not request.session['user']: 16 path = request.path_info.lstrip('/') 17 if not any(re.search(m, path) for m in EXEMPT_URLS): 18 return HttpResponseRedirect(settings.LOGIN_URL) 19 20 def process_view(self, request, view_func, view_func_args, view_func_kwargs): 21 print('process_view') 22 23 def process_response(self, request, response): 24 print('process_response') 25 return response
2、项目settings中 配置参数
# 登录页 LOGIN_URL = '/user/login/' # 除开登录,其他未登录可访问的页面 或正则 LOGIN_EXEMPT_URLS = ['/user/register', '/user/vcode', '/user/checkcode']
3、把自定义中间件添加到settings的MIDDLEWARE中
1 MIDDLEWARE = [ 2 'django.middleware.security.SecurityMiddleware', 3 'django.contrib.sessions.middleware.SessionMiddleware', 4 'django.middleware.common.CommonMiddleware', 5 'django.middleware.csrf.CsrfViewMiddleware', 6 'django.contrib.auth.middleware.AuthenticationMiddleware', 7 'django.contrib.messages.middleware.MessageMiddleware', 8 'django.middleware.clickjacking.XFrameOptionsMiddleware', 9 'users.my_middleware.userVaild', 10 ]

浙公网安备 33010602011771号