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获取任意xml节点值的方法
May 05 Python
python 根据正则表达式提取指定的内容实例详解
Dec 04 Python
Python实现字典的遍历与排序功能示例
Dec 23 Python
彻底搞懂Python字符编码
Jan 23 Python
人生苦短我用python python如何快速入门?
Mar 12 Python
Django 路由系统URLconf的使用
Oct 11 Python
在pandas多重索引multiIndex中选定指定索引的行方法
Nov 16 Python
python面向对象实现名片管理系统文件版
Apr 26 Python
PyQt编程之如何在屏幕中央显示窗体的实例
Jun 18 Python
Python 运行.py文件和交互式运行代码的区别详解
Jul 02 Python
python Django 创建应用过程图示详解
Jul 29 Python
解决Keras TensorFlow 混编中 trainable=False设置无效问题
Jun 28 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配置php-fpm启动参数及配置详解
2013/11/04 PHP
通过源码解析Laravel的依赖注入
2018/01/22 PHP
在Laravel的Model层做数据缓存的实现
2019/09/26 PHP
Thinkphp 框架扩展之Widget扩展实现方法分析
2020/04/23 PHP
jquery利用ajax调用后台方法实例
2013/08/23 Javascript
JavaScript中的数组操作介绍
2014/12/30 Javascript
JavaScript中的操作符类型转换示例总结
2016/05/30 Javascript
JS实现控制文本框的内容
2016/07/10 Javascript
Angularjs中使用layDate日期控件示例
2017/01/11 Javascript
js中常用的Math方法总结
2017/01/12 Javascript
js CSS3实现卡牌旋转切换效果
2017/07/04 Javascript
Vue.js数据绑定之data属性
2017/07/07 Javascript
JS库 Highlightjs 添加代码行号的实现代码
2017/09/13 Javascript
详细介绍RxJS在Angular中的应用
2017/09/23 Javascript
Vue自定义全局Toast和Loading的实例详解
2019/04/18 Javascript
微信小程序实现分享商品海报功能
2019/09/30 Javascript
vuex存储token示例
2019/11/11 Javascript
react实现复选框全选和反选组件效果
2020/08/25 Javascript
[34:47]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第一场 11.18
2020/11/18 DOTA
Python中标准模块importlib详解
2017/04/16 Python
Python使用pyshp库读取shapefile信息的方法
2018/12/29 Python
Django发送邮件功能实例详解
2019/09/02 Python
python入门之基础语法学习笔记
2020/02/08 Python
Python 的 __str__ 和 __repr__ 方法对比
2020/09/02 Python
python中reload重载实例用法
2020/12/15 Python
python绘制高斯曲线
2021/02/19 Python
极简的HTML5模版
2015/07/09 HTML / CSS
印度民族服装购物网站:BIBA
2019/08/05 全球购物
AJAX的优缺点都有什么
2015/08/18 面试题
超市开学活动方案
2014/03/01 职场文书
《月球之谜》教学反思
2014/04/10 职场文书
公司承诺书范文
2014/05/19 职场文书
入党积极分子学习优秀共产党员先进事迹思想汇报
2014/09/13 职场文书
学生穿着不得体检讨书
2014/10/12 职场文书
警用民用对讲机找不同
2022/02/18 无线电
一文搞清楚MySQL count(*)、count(1)、count(col)区别
2022/03/03 MySQL