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语言中的按位运算符
Nov 26 Python
python下实现二叉堆以及堆排序的示例
Sep 29 Python
Python3.6基于正则实现的计算器示例【无优化简单注释版】
Jun 14 Python
Python读取csv文件分隔符设置方法
Jan 14 Python
python2.7 安装pip的方法步骤(管用)
May 05 Python
python3.6环境安装+pip环境配置教程图文详解
Jun 20 Python
python设置代理和添加镜像源的方法
Feb 14 Python
Python OpenCV去除字母后面的杂线操作
Jul 05 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
Jul 14 Python
python 用opencv实现图像修复和图像金字塔
Nov 27 Python
Pytorch中TensorBoard及torchsummary的使用详解
May 12 Python
Python内置包对JSON文件数据进行编码和解码
Apr 12 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
SONY SRF-40W电路分析
2021/03/02 无线电
php preg_match_all结合str_replace替换内容中所有img
2008/10/11 PHP
php读取mysql的简单实例
2014/01/15 PHP
PHP实现简单汉字验证码
2015/07/28 PHP
AJAX PHP无刷新form表单提交的简单实现(推荐)
2016/09/09 PHP
php实现登陆模块功能示例
2016/10/20 PHP
laravel实现按时间日期进行分组统计方法示例
2019/03/23 PHP
一段效率很高的for循环语句使用方法
2007/08/13 Javascript
jQuery tagsinput在h5邮件客户端中应用详解
2016/09/26 Javascript
jQuery插件zTree实现获取一级节点数据的方法
2017/03/08 Javascript
less简单入门(CSS 预处理语言)
2017/03/08 Javascript
Vue父组件调用子组件事件方法
2018/02/23 Javascript
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
vue生命周期的探索
2019/04/03 Javascript
layui下拉列表select实现可输入查找的方法
2019/09/28 Javascript
jQuery使用jsonp实现百度搜索的示例代码
2020/07/08 jQuery
node脚手架搭建服务器实现token验证的方法
2021/01/20 Javascript
[01:22:28]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第一场 1月18日
2021/03/11 DOTA
python生成器的使用方法
2013/11/21 Python
python实现ip查询示例
2014/03/26 Python
Python 提取dict转换为xml/json/table并输出的实现代码
2016/08/28 Python
Python制作Windows系统服务
2017/03/25 Python
Django集成CAS单点登录的方法示例
2019/06/10 Python
python and or用法详解
2019/06/26 Python
python学生信息管理系统实现代码
2019/12/17 Python
解决pycharm同一目录下无法import其他文件
2020/02/12 Python
Foot Locker德国官方网站:美国运动服和鞋类零售商
2018/11/01 全球购物
大学生的创业计划书就该这么写
2014/01/30 职场文书
给面试官的感谢信
2014/02/01 职场文书
医院总经理岗位职责
2014/02/04 职场文书
电视购物广告词
2014/03/19 职场文书
护士长竞聘书
2014/03/31 职场文书
2014年绿化工作总结
2014/12/09 职场文书
导师工作推荐信
2015/03/27 职场文书
车辆管理制度范本
2015/08/05 职场文书
Python使用openpyxl模块处理Excel文件
2022/06/05 Python