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中的yield函数的用法
Apr 03 Python
Python2实现的LED大数字显示效果示例
Sep 04 Python
python获取命令行输入参数列表的实例代码
Jun 23 Python
基于随机梯度下降的矩阵分解推荐算法(python)
Aug 31 Python
Python 数据库操作 SQLAlchemy的示例代码
Feb 18 Python
用Python中的turtle模块画图两只小羊方法
Apr 09 Python
python、Matlab求定积分的实现
Nov 20 Python
python numpy 反转 reverse示例
Dec 04 Python
python 引用传递和值传递详解(实参,形参)
Jun 05 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
Sep 03 Python
Python实现http接口自动化测试的示例代码
Oct 09 Python
python实现求纯色彩图像的边框
Apr 08 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抓取淘宝商品的用户晒单评论+图片+搜索商品列表实例
2016/04/14 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
2018/06/10 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
2019/10/17 PHP
php接口隔离原则实例分析
2019/11/11 PHP
Prototype使用指南之hash.js
2007/01/10 Javascript
jquery 表单取值常用代码
2009/12/22 Javascript
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
2010/10/26 Javascript
让图片旋转任意角度及JQuery插件使用介绍
2013/03/20 Javascript
jquery实现盒子下拉效果示例代码
2013/09/12 Javascript
jQuery中bind与live的用法及区别小结
2014/01/27 Javascript
使用js操作css实现js改变背景图片示例
2014/03/10 Javascript
jquery+ajax验证不通过也提交表单问题处理
2014/12/12 Javascript
IE10中flexigrid无法显示数据的解决方法
2015/07/26 Javascript
深入浅析Bootstrap列表组组件
2016/05/03 Javascript
Vue.directive自定义指令的使用详解
2017/03/10 Javascript
Vuex 使用 v-model 配合 state的方法
2018/11/13 Javascript
vue 实现tab切换保持数据状态
2020/07/21 Javascript
[54:54]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
pytyon 带有重复的全排列
2013/08/13 Python
python使用arcpy.mapping模块批量出图
2017/03/06 Python
python中多个装饰器的执行顺序详解
2018/10/08 Python
python3+opencv3识别图片中的物体并截取的方法
2018/12/05 Python
Python Pillow Image Invert
2019/01/22 Python
Python通过TensorFlow卷积神经网络实现猫狗识别
2019/03/14 Python
使用Python制作一个打字训练小工具
2019/10/01 Python
python 模拟登录B站的示例代码
2020/12/15 Python
Django2.1.7 查询数据返回json格式的实现
2020/12/29 Python
Ajax和javascript的区别
2013/07/20 面试题
草船借箭教学反思
2014/02/03 职场文书
幼儿园运动会入场词
2014/02/10 职场文书
阳光体育活动方案
2014/02/16 职场文书
企业授权委托书范本
2014/04/02 职场文书
机械设计制造及其自动化专业求职信
2014/06/17 职场文书
总经理助理岗位职责范本
2015/03/31 职场文书
浅谈Python数学建模之固定费用问题
2021/06/23 Python
Django对接elasticsearch实现全文检索的示例代码
2021/08/02 Python