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中将函数赋值给变量时需要注意的一些问题
Aug 18 Python
Python实现列表删除重复元素的三种常用方法分析
Nov 24 Python
Python使用itertools模块实现排列组合功能示例
Jul 02 Python
python爬取淘宝商品销量信息
Nov 16 Python
Python中fnmatch模块的使用详情
Nov 30 Python
提升python处理速度原理及方法实例
Dec 25 Python
Windows上安装tensorflow  详细教程(图文详解)
Feb 04 Python
Python读写操作csv和excle文件代码实例
Mar 16 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
Jul 03 Python
Python 的 __str__ 和 __repr__ 方法对比
Sep 02 Python
python对 MySQL 数据库进行增删改查的脚本
Oct 22 Python
彻底解决Python包下载慢问题
Nov 15 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 mssql 日期出现中文字符的解决方法
2009/03/10 PHP
PHP自动生成后台导航网址的最佳方法
2013/08/27 PHP
php实现用已经过去多长时间的方式显示时间
2015/06/05 PHP
php数字运算验证码的实现代码
2015/07/30 PHP
golang与php实现计算两个经纬度之间距离的方法
2016/07/22 PHP
PHP实现简单注册登录系统
2020/12/28 PHP
javascript实现的距离现在多长时间后的一个格式化的日期
2009/10/29 Javascript
JavaScript 解析Json字符串的性能比较分析代码
2009/12/16 Javascript
JavaScript高级程序设计 阅读笔记(二十) js错误处理
2012/08/14 Javascript
js带按钮的提示框可供选择示例代码
2013/09/17 Javascript
jQuery插件实现表格隔行换色且感应鼠标高亮行变色
2013/09/22 Javascript
JS 去除Array中的null值示例代码
2013/11/20 Javascript
js实现遮罩层弹出框的方法
2015/01/15 Javascript
js+html5实现canvas绘制椭圆形图案的方法
2016/05/21 Javascript
js canvas实现放大镜查看图片功能
2017/06/08 Javascript
arcgis for js栅格图层叠加(Raster Layer)问题
2017/11/22 Javascript
前端js中的事件循环eventloop机制详解
2019/05/15 Javascript
Python模拟登录12306的方法
2014/12/30 Python
python去除字符串中的换行符
2017/10/11 Python
django之跨表查询及添加记录的示例代码
2018/10/16 Python
在Pycharm中修改文件默认打开方式的方法
2019/01/17 Python
python实现在函数中修改变量值的方法
2019/07/16 Python
Python类继承和多态原理解析
2020/02/05 Python
Django 返回json数据的实现示例
2020/03/05 Python
Django 再谈一谈json序列化
2020/03/16 Python
使用CSS3来制作消息提醒框
2015/07/12 HTML / CSS
HTML5添加鼠标悬浮音响效果不使用FLASH
2014/04/23 HTML / CSS
美国最大的网络男装服装品牌:Bonobos
2017/05/25 全球购物
爱尔兰领先的在线体育用品零售商:theGAAstore
2018/04/16 全球购物
LN-CC英国:伦敦时尚生活的缩影
2019/09/01 全球购物
Ray-Ban雷朋奥地利官网:全球领先的太阳眼镜品牌
2020/10/12 全球购物
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
高一英语教学反思
2014/01/22 职场文书
研究生个人学年总结
2015/02/14 职场文书
2016小学教师读书心得体会
2016/01/13 职场文书
教师法制教育培训学习心得体会
2016/01/14 职场文书