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报错MemoryError的问题
Jun 26 Python
Python简单爬虫导出CSV文件的实例讲解
Jul 06 Python
python微信公众号之关注公众号自动回复
Oct 25 Python
用Python识别人脸,人种等各种信息
Jul 15 Python
seek引发的python文件读写的问题及解决
Jul 26 Python
Python类反射机制使用实例解析
Dec 30 Python
Python Tornado之跨域请求与Options请求方式
Mar 28 Python
python 解决selenium 中的 .clear()方法失效问题
Sep 01 Python
Python random模块的使用示例
Oct 10 Python
python opencv实现图像配准与比较
Feb 09 Python
解决Pytorch修改预训练模型时遇到key不匹配的情况
Jun 05 Python
Python干货实战之八音符酱小游戏全过程详解
Oct 24 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
js几个验证函数代码
2010/03/25 Javascript
可以用来调试JavaScript错误的解决方案
2010/08/07 Javascript
jquery下json数组的操作实现代码
2010/08/09 Javascript
artdialog的图片/标题以及关闭按钮不显示的解决方法
2013/06/27 Javascript
js/jquery解析json和数组格式的方法详解
2014/01/09 Javascript
javascript操作excel生成报表全攻略
2014/05/04 Javascript
node.js中的fs.readlinkSync方法使用说明
2014/12/17 Javascript
url中的特殊符号有什么含义(推荐)
2016/06/17 Javascript
浅谈addEventListener和attachEvent的区别
2016/07/14 Javascript
vue 项目如何引入微信sdk接口的方法
2017/12/18 Javascript
js实现各浏览器全屏代码实例
2018/07/03 Javascript
JavaScript设计模式之代理模式简单实例教程
2018/07/03 Javascript
Vue2.0仿饿了么webapp单页面应用详细步骤
2018/07/08 Javascript
Node.js 使用axios读写influxDB的方法示例
2018/10/26 Javascript
vue使用Proxy实现双向绑定的方法示例
2019/03/20 Javascript
vue中使用rem布局代码详解
2019/10/30 Javascript
微信小程序地图实现展示线路
2020/07/29 Javascript
vue+echarts实现中国地图流动效果(步骤详解)
2021/01/27 Vue.js
跟老齐学Python之永远强大的函数
2014/09/14 Python
利用Psyco提升Python运行速度
2014/12/24 Python
python引用DLL文件的方法
2015/05/11 Python
Python中函数及默认参数的定义与调用操作实例分析
2017/07/25 Python
Python实现进程同步和通信的方法
2018/01/02 Python
Python 根据数据模板创建shapefile的实现
2019/11/26 Python
django使用F方法更新一个对象多个对象字段的实现
2020/03/28 Python
如何搭建pytorch环境的方法步骤
2020/05/06 Python
html5 postMessage解决跨域、跨窗口消息传递方案
2016/12/20 HTML / CSS
美国领先的奢侈手表在线零售商:WatchMaxx
2017/12/17 全球购物
图库照片、免版税图片、矢量艺术、视频片段:Depositphotos
2019/08/02 全球购物
Mountain Hardwear官网:攀岩服装和户外装备
2019/09/26 全球购物
String、StringBuffer、StringBuilder有区别
2015/09/18 面试题
《雾凇》教学反思
2014/02/17 职场文书
令人印象深刻的自荐信
2014/05/25 职场文书
职工年度考核评语
2014/12/31 职场文书
土木工程生产实习心得体会
2016/01/22 职场文书
Mysql数据库表中为什么有索引却没有提高查询速度
2022/02/24 MySQL