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正则表达式匹配ip地址实例
Oct 09 Python
python生成随机mac地址的方法
Mar 16 Python
用Python实现命令行闹钟脚本实例
Sep 05 Python
python遍历序列enumerate函数浅析
Oct 17 Python
Python打印输出数组中全部元素
Mar 13 Python
朴素贝叶斯分类算法原理与Python实现与使用方法案例
Jun 26 Python
Python实现爬取马云的微博功能示例
Feb 16 Python
Python 运行.py文件和交互式运行代码的区别详解
Jul 02 Python
Python实用库 PrettyTable 学习笔记
Aug 06 Python
pygame实现俄罗斯方块游戏(基础篇2)
Oct 29 Python
Django 限制访问频率的思路详解
Dec 24 Python
Python并发爬虫常用实现方法解析
Nov 19 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中使用redis队列操作实例代码
2013/02/07 PHP
php过滤XSS攻击的函数
2013/11/12 PHP
部署PHP项目应该注意的几点事项分享
2013/12/20 PHP
php验证码生成器
2017/05/24 PHP
Yii2.0实现的批量更新及批量插入功能示例
2019/01/29 PHP
40款非常有用的 jQuery 插件推荐(系列一)
2011/12/21 Javascript
JQuery 实现在同一页面锚点链接之间的平滑滚动
2014/10/29 Javascript
jquery 操作css样式、位置、尺寸方法汇总
2014/11/28 Javascript
JavaScript通过select动态更换图片的方法
2015/03/23 Javascript
在JavaScript中使用对数Math.log()方法的教程
2015/06/15 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
2015/08/12 Javascript
Javascript数组Array方法解读
2016/03/13 Javascript
JS图片等比例缩放方法完整示例
2016/08/03 Javascript
jQuery 翻页组件yunm.pager.js实现div局部刷新的思路
2016/08/11 Javascript
利用JQuery直接调用asp.net后台的简单方法
2016/10/27 Javascript
javascript实现秒表计时器的制作方法
2017/02/16 Javascript
JavaScript实现简单的星星评分效果
2017/05/18 Javascript
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
js实现以最简单的方式将数组元素添加到对象中的方法
2017/12/20 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
2018/06/27 Javascript
JS函数进阶之继承用法实例分析
2020/01/15 Javascript
使用Node.js实现base64和png文件相互转换的方法
2020/03/11 Javascript
python实现简单socket程序在两台电脑之间传输消息的方法
2015/03/13 Python
使用Python脚本在Linux下实现部分Bash Shell的教程
2015/04/17 Python
浅析python3中的os.path.dirname(__file__)的使用
2018/08/30 Python
python 消除 futureWarning问题的解决
2019/12/25 Python
如何通过python检查文件是否被占用
2020/12/18 Python
伦敦一家非常流行的时尚精品店:Oxygen Boutique
2017/01/15 全球购物
香港优质食材和美酒专门店:FoodWise
2017/09/01 全球购物
TheFork葡萄牙:欧洲领先的在线餐厅预订平台
2019/05/27 全球购物
KOHLER科勒美国官网:国际著名卫浴橱柜领先品牌
2020/06/27 全球购物
经济管理专业毕业生推荐信
2013/11/11 职场文书
银行柜员应聘推荐信范文
2013/11/24 职场文书
学雷锋日活动总结
2015/02/06 职场文书
详解Vue router路由
2021/11/20 Vue.js
MySQL添加索引特点及优化问题
2022/07/23 MySQL