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 相关文章推荐
windows系统下Python环境的搭建(Aptana Studio)
Mar 06 Python
python机器学习之神经网络(二)
Dec 20 Python
python实现朴素贝叶斯分类器
Mar 28 Python
Python2.7环境Flask框架安装简明教程【已测试】
Jul 13 Python
程序员写Python时的5个坏习惯,你有几条?
Nov 26 Python
PyQt5+requests实现车票查询工具
Jan 21 Python
python写入文件自动换行问题的方法
Jul 05 Python
Python使用OpenPyXL处理Excel表格
Jul 02 Python
利用python如何实现猫捉老鼠小游戏
Dec 04 Python
解决pycharm导入numpy包的和使用时报错:RuntimeError: The current Numpy installation (‘D:\\python3.6\\lib\\site-packa的问题
Dec 08 Python
解决pytorch 模型复制的一些问题
Mar 03 Python
Python使用scapy模块发包收包
May 07 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遍历文件夹与子目录的函数代码
2011/09/26 PHP
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
2014/06/21 Servers
destoon实现调用图文新闻的方法
2014/08/21 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
2016/10/10 PHP
php使用环形链表解决约瑟夫问题完整示例
2018/08/07 PHP
让人蛋疼的JavaScript语法特性
2014/09/30 Javascript
使用JS实现jQuery的addClass, removeClass, hasClass函数功能
2014/10/31 Javascript
基于zepto.js实现仿手机QQ空间的大图查看组件ImageView.js详解
2015/03/05 Javascript
JavaScript实现文字跟随鼠标特效
2015/08/06 Javascript
JavaScript必知必会(二) null 和undefined
2016/06/08 Javascript
Bootstrap时间选择器datetimepicker和daterangepicker使用实例解析
2016/09/17 Javascript
详解webpack之scss和postcss-loader的配置
2018/01/09 Javascript
剖析Angular Component的源码示例
2018/03/23 Javascript
关于vue v-for循环解决img标签的src动态绑定问题
2018/09/18 Javascript
详解jQuery如何实现模糊搜索
2019/05/10 jQuery
vue-cli3配置favicon.ico和title的流程
2020/10/27 Javascript
Ant-design-vue Table组件customRow属性的使用说明
2020/10/28 Javascript
使用PDB简单调试Python程序简明指南
2015/04/25 Python
python 性能优化方法小结
2017/03/31 Python
Python pyinotify日志监控系统处理日志的方法
2018/03/08 Python
python获取中文字符串长度的方法
2018/11/14 Python
linux环境下Django的安装配置详解
2019/07/22 Python
python中sympy库求常微分方程的用法
2020/04/28 Python
基于Python爬取股票数据过程详解
2020/10/21 Python
html svg生成环形进度条的实现方法
2019/09/23 HTML / CSS
巴西补充剂和维生素购物网站:Natue
2019/06/17 全球购物
PHP如何删除一个Cookie值
2012/11/15 面试题
Android面试题附答案
2014/12/08 面试题
如何用Java实现列出某个目录下的所有子目录
2015/07/20 面试题
JAVA软件工程师测试题
2014/07/25 面试题
动员大会主持词
2014/03/20 职场文书
2014年最新大专生职业生涯规划书范文
2014/09/13 职场文书
统计员岗位职责范本
2015/04/14 职场文书
同学聚会感言一句话
2015/07/30 职场文书
分享Python异步爬取知乎热榜
2022/04/12 Python
JavaScript原型链中函数和对象的理解
2022/06/16 Javascript