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中实现定制类的特殊方法总结
Sep 28 Python
跟老齐学Python之for循环语句
Oct 02 Python
Python使用matplotlib绘制动画的方法
May 20 Python
Python中类型检查的详细介绍
Feb 13 Python
python with提前退出遇到的坑与解决方案
Jan 05 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
Mar 14 Python
django用户登录验证的完整示例代码
Jul 21 Python
淘宝秒杀python脚本 扫码登录版
Sep 19 Python
python plt可视化——打印特殊符号和制作图例代码
Apr 17 Python
Python爬取网页信息的示例
Sep 24 Python
总结python 三种常见的内存泄漏场景
Nov 20 Python
Python中Pyspider爬虫框架的基本使用详解
Jan 27 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注册登录系统简化版
2020/12/28 PHP
php rmdir使用递归函数删除非空目录实例详解
2016/10/20 PHP
javascript html 静态页面传参数
2009/04/10 Javascript
jQuery之选项卡的简单实现
2014/02/28 Javascript
获取当前点击按钮的id用this.id实现
2014/03/17 Javascript
jQuery.trim() 函数及trim()用法详解
2015/10/26 Javascript
Treegrid的动态加载实例代码
2016/04/29 Javascript
jQuery实现的可编辑表格完整实例
2016/06/20 Javascript
AngularJS  $on、$emit和$broadcast的使用
2016/09/05 Javascript
element-ui上传一张图片后隐藏上传按钮功能
2019/05/22 Javascript
微信小程序canvas动态时钟
2020/10/22 Javascript
Javascript实现单选框效果
2020/12/09 Javascript
[01:43]倾听DOTA2英雄之声 魅惑魔女国服配音鉴赏
2013/06/06 DOTA
python数据结构树和二叉树简介
2014/04/29 Python
编写Python小程序来统计测试脚本的关键字
2016/03/12 Python
浅谈Python类里的__init__方法函数,Python类的构造函数
2016/12/10 Python
Python3实现简单可学习的手写体识别(实例讲解)
2017/10/21 Python
使用 Python 实现文件递归遍历的三种方式
2018/07/18 Python
Python enumerate函数功能与用法示例
2019/03/01 Python
Django框架登录加上验证码校验实现验证功能示例
2019/05/23 Python
python torch.utils.data.DataLoader使用方法
2020/04/02 Python
Python自定义聚合函数merge与transform区别详解
2020/05/26 Python
Python打印不合法的文件名
2020/07/31 Python
移动端html5 meta标签的神奇功效
2016/01/06 HTML / CSS
详解canvas绘图时遇到的跨域问题
2018/03/22 HTML / CSS
英国评分最高的女性剃须刀订阅盒:FFS Beauty
2018/01/25 全球购物
英国领先的体验日提供商:Buyagift
2019/04/19 全球购物
写一个在SQL Server创建表的SQL语句
2012/03/10 面试题
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/04/11 面试题
大四自我鉴定范文
2013/10/06 职场文书
餐厅楼面主管岗位职责范本
2014/02/16 职场文书
平安工地汇报材料
2014/08/19 职场文书
年会邀请函范文
2015/01/30 职场文书
商务司机岗位职责
2015/04/10 职场文书
热爱劳动主题班会
2015/08/14 职场文书
如何使用flask将模型部署为服务
2021/05/13 Python