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的Django框架中调用方法和处理无效变量
Jul 15 Python
教大家使用Python SqlAlchemy
Feb 12 Python
Python文件与文件夹常见基本操作总结
Sep 19 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
May 16 Python
python遍历文件目录、批量处理同类文件
Aug 31 Python
Python实现将蓝底照片转化为白底照片功能完整实例
Dec 13 Python
Python中qutip用法示例详解
Oct 02 Python
python 实现图片修复(可用于去水印)
Nov 19 Python
Python 中 sorted 如何自定义比较逻辑
Feb 02 Python
Django中的DateTimeField和DateField实现
Feb 24 Python
Python趣味挑战之给幼儿园弟弟生成1000道算术题
May 28 Python
Python requests用法和django后台处理详解
Mar 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
phplock(php进程锁) v1.0 beta1
2009/11/24 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
2012/07/16 PHP
PHP基础学习之流程控制的实现分析
2013/04/28 PHP
PHP的魔术常量__METHOD__简介
2014/07/08 PHP
Laravel搭建后台登录系统步骤详解
2016/07/26 PHP
PHP设计模式之装饰器模式定义与用法详解
2018/04/02 PHP
javascript function调用时的参数检测常用办法
2010/02/26 Javascript
Easy.Ajax 部分源代码 支持文件上传功能, 兼容所有主流浏览器
2011/02/24 Javascript
jquery获得页面元素的坐标值实现思路及代码
2013/04/15 Javascript
Javascript 计算字符串在localStorage中所占字节数
2015/10/21 Javascript
整理Javascript事件响应学习笔记
2015/12/02 Javascript
JS区分浏览器页面是刷新还是关闭
2016/04/17 Javascript
js实现HashTable(哈希表)的实例分析
2016/11/21 Javascript
Bootstrap表格使用方法详解
2017/02/17 Javascript
Vue实现百度下拉提示搜索功能
2017/06/21 Javascript
vue中v-model的应用及使用详解
2018/06/27 Javascript
使用Angular Cli如何创建Angular私有库详解
2019/01/30 Javascript
Vue中computed和watch有哪些区别
2020/12/19 Vue.js
[44:43]完美世界DOTA2联赛决赛日 FTD vs GXR 第一场 11.08
2020/11/11 DOTA
用Python中的字典来处理索引统计的方法
2015/05/05 Python
简单介绍使用Python解析并修改XML文档的方法
2015/10/15 Python
详解JavaScript编程中的window与window.screen对象
2015/10/26 Python
PyQt4实时显示文本内容GUI的示例
2019/06/14 Python
Python中遍历列表的方法总结
2019/06/27 Python
详解Python打包分发工具setuptools
2019/08/05 Python
Python数据可视化实现正态分布(高斯分布)
2019/08/21 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
2020/01/10 Python
CSS3实现跳动的动画效果
2016/09/12 HTML / CSS
css3打造一款漂亮的卡哇伊按钮
2013/03/20 HTML / CSS
利用CSS3把图片变成灰色模式的实例代码
2016/09/06 HTML / CSS
HTML5 Canvas实现文本对齐的方法总结
2016/03/24 HTML / CSS
中国制造网:Made-in-China.com
2019/10/25 全球购物
中学生关于梦想的演讲稿
2014/08/22 职场文书
部门主管竞聘书
2015/09/15 职场文书
2016幼儿园中班开学寄语
2015/12/03 职场文书
python基础入门之普通操作与函数(三)
2021/06/13 Python