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获取运行目录与当前脚本目录的方法
Jun 01 Python
numpy中索引和切片详解
Dec 15 Python
python中列表和元组的区别
Dec 18 Python
django进阶之cookie和session的使用示例
Aug 17 Python
python使用pygame框架实现推箱子游戏
Nov 20 Python
Pycharm远程调试原理及具体配置详解
Aug 08 Python
Python 调用 Outlook 发送邮件过程解析
Aug 08 Python
Python socket模块方法实现详解
Nov 05 Python
Flask中endpoint的理解(小结)
Dec 11 Python
pytorch 实现cross entropy损失函数计算方式
Jan 02 Python
pytorch 图像中的数据预处理和批标准化实例
Jan 15 Python
Python猫眼电影最近上映的电影票房信息
Sep 18 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
环境会对咖啡种植有什么影响
2021/03/03 咖啡文化
php中DOMElement操作xml文档实例演示
2013/03/26 PHP
PHP判断来访是搜索引擎蜘蛛还是普通用户的代码小结
2015/09/14 PHP
php实现跨域提交form表单的方法【2种方法】
2016/10/17 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
2018/04/21 PHP
Laravel 自带的Auth验证登录方法
2019/09/30 PHP
Alliance vs Liquid BO3 第二场2.13
2021/03/10 DOTA
利用js实现选项卡的特别效果的实例
2013/03/03 Javascript
JQuery的read函数与js的onload不同方式实现
2013/03/18 Javascript
jquery点击页面任何区域实现鼠标焦点十字效果
2013/06/21 Javascript
Thinkphp模板没有解析直接原样输出的解决方法
2014/10/31 Javascript
javascript如何实现360度全景照片问题汇总
2016/04/04 Javascript
微信小程序商品到详情的实现
2017/06/27 Javascript
vue 搭建后台系统模块化开发详解
2019/05/01 Javascript
layer.open回调获取弹出层参数的实现方法
2019/09/10 Javascript
vue中英文切换实例代码
2020/01/21 Javascript
在 Vue 中使用 JSX 及使用它的原因浅析
2020/02/10 Javascript
解决echarts数据二次渲染不成功的问题
2020/07/20 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
vue-cli脚手架的.babelrc文件用法说明
2020/09/11 Javascript
python中的闭包函数
2018/02/09 Python
Python多进程原理与用法分析
2018/08/21 Python
Python过滤txt文件内重复内容的方法
2018/10/21 Python
Python Pillow Image Invert
2019/01/22 Python
Python 函数list&read&seek详解
2019/08/28 Python
完美解决keras保存好的model不能成功加载问题
2020/06/11 Python
Python爬取豆瓣数据实现过程解析
2020/10/27 Python
python 将html转换为pdf的几种方法
2020/12/29 Python
网络体系结构及协议的定义
2014/03/13 面试题
《鸟岛》教学反思
2014/04/26 职场文书
作风整顿剖析材料
2014/09/30 职场文书
工作失误检讨书(3篇)
2014/10/11 职场文书
房屋租赁协议书
2014/10/18 职场文书
贪污检举信范文
2015/03/02 职场文书
Golang二维数组的使用方式
2021/05/28 Golang