小打小闹  

原理:使用中间件对访问的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 ]

 

posted on 2020-09-07 16:23  小打小闹  阅读(683)  评论(0)    收藏  举报