Django中间件拦截未登录url实例详解


Posted in Python onSeptember 03, 2019

1.利用装饰器在视图中拦截未登录的url

@login_required(login_url='/user/login/')
def homepage(request):
  pass

这种方法适合于程序中只有少数几个需要登录拦截的url。

2. 利用中间件技术拦截未登录的url

2.1 在settings.py添加MIDDLEWARE设置:middleware.LoginCheckMiddleware

MIDDLEWARE = [
  'django.middleware.security.SecurityMiddleware',
  'django.contrib.sessions.middleware.SessionMiddleware',
  'django.middleware.common.CommonMiddleware',
  # 'django.middleware.csrf.CsrfViewMiddleware',
  'django.contrib.auth.middleware.AuthenticationMiddleware',
  'django.contrib.messages.middleware.MessageMiddleware',
  'django.middleware.clickjacking.XFrameOptionsMiddleware',
  # url登录拦截中间件
  'middleware.LoginCheckMiddleware',
]

2.2 在项目目录下创建middleware.py文件,文件中创建拦截类:LoginCheckMiddleware

import re
from django.http import JsonResponse
from django.shortcuts import HttpResponseRedirect
from django.utils.deprecation import MiddlewareMixin

class LoginCheckMiddleware(MiddlewareMixin):
  def process_request(self, request): 
    # | 分隔要匹配的多个url,从左到右匹配,有匹配就返回匹配值,否则返回None。
    pattern = r'^(/$|/user/user/[0-9]+/$|/user/user/$|/user/getuserall|/user/get_token_code|/user/update_phone_no|/stock|/future)'

    # 如果 request.path 的开始位置能够找到这个正则样式的任意个匹配,就返回一个相应的匹配对象。
    # 如果不匹配,就返回None
    match = re.search(pattern, request.path)
    # 需要拦截的url
    if match and not request.user.is_authenticated:
      print('用户未登录URL拦截 >>: ', request.path)

   # 主页未登录
      if request.path == '/':
        return HttpResponseRedirect('/user/login/')
      # ajax请求未登录
      else:
        return JsonResponse({'status': False, 'info': '用户未登录!'})

应用了正则表达式过滤需要拦截的url。

由于ajax请求不能重定向,所以对于ajax请求的url拦截返回json数据,由前端处理返回的结果。

以上就是本次介绍的全部知识点内容,感谢大家的学习和对三水点靠木的支持。

Python 相关文章推荐
python利用hook技术破解https的实例代码
Mar 25 Python
python中ConfigParse模块的用法
Sep 29 Python
python3 shelve模块的详解
Jul 08 Python
利用Pandas 创建空的DataFrame方法
Apr 08 Python
python的常用模块之collections模块详解
Dec 06 Python
Python函数中参数是传递值还是引用详解
Jul 02 Python
python 使用plt画图,去除图片四周的白边方法
Jul 09 Python
python程序 线程队列queue使用方法解析
Sep 23 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
Oct 14 Python
python使用gdal对shp读取,新建和更新的实例
Mar 10 Python
Python自动化办公Excel模块openpyxl原理及用法解析
Nov 05 Python
python基于selenium爬取斗鱼弹幕
Feb 20 Python
如何为Python终端提供持久性历史记录
Sep 03 #Python
Python openpyxl读取单元格字体颜色过程解析
Sep 03 #Python
python xlwt如何设置单元格的自定义背景颜色
Sep 03 #Python
python实现静态web服务器
Sep 03 #Python
Python的Lambda函数用法详解
Sep 03 #Python
Python获取一个用户名的组ID过程解析
Sep 03 #Python
python多线程实现TCP服务端
Sep 03 #Python
You might like
php中判断数组是一维,二维,还是多维的解决方法
2013/05/04 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
2014/10/13 PHP
PHP用反撇号执行外部命令
2015/04/14 PHP
如何使用PHP给图片加水印
2016/10/12 PHP
PHP中检索字符串的方法分析【strstr与substr_count方法】
2017/02/17 PHP
如何阻止复制剪切和粘贴事件为了表单内容的安全
2013/05/23 Javascript
jquery中邮箱地址 URL网站地址正则验证实例代码
2013/09/15 Javascript
jquery 检测元素是否存在的实例代码
2013/11/19 Javascript
3个可以改善用户体验的AngularJS指令介绍
2015/06/18 Javascript
Jquery操作Ajax方法小结
2015/11/29 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
2016/07/21 Javascript
Vue中之nextTick函数源码分析详解
2017/10/17 Javascript
AngularJS实现动态切换样式的方法分析
2018/06/26 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
2019/01/18 Javascript
vue计算属性get和set用法示例
2019/02/08 Javascript
微信小程序实现联动选择器
2019/02/15 Javascript
[31:33]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第一场
2014/05/23 DOTA
[49:12]完美世界DOTA2联赛PWL S2 Magma vs GXR 第二场 11.29
2020/12/02 DOTA
python实现文件名批量替换和内容替换
2014/03/20 Python
python实现单链表的方法示例
2019/09/03 Python
在python中做正态性检验示例
2019/12/09 Python
python 中值滤波,椒盐去噪,图片增强实例
2019/12/18 Python
python numpy矩阵信息说明,shape,size,dtype
2020/05/22 Python
哪种Python框架适合你?简单介绍几种主流Python框架
2020/08/04 Python
如何用python 操作zookeeper
2020/12/28 Python
互动出版网:专业书籍
2017/03/21 全球购物
手工制作的豪华英式沙发和沙发床:Willow & Hall
2019/05/03 全球购物
公务员培训自我鉴定
2013/09/19 职场文书
企业厂务公开实施方案
2014/03/26 职场文书
节约用水标语
2014/06/11 职场文书
简单租房协议书(范本)
2014/10/13 职场文书
群众路线组织生活会发言材料
2014/10/17 职场文书
党小组评议意见
2015/06/02 职场文书
二年级数学教学反思
2016/02/16 职场文书
幼儿园科学课教学反思
2016/03/03 职场文书
解析:创业计划书和商业计划书二者之间到底有什么区别
2019/08/14 职场文书