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算法学习之基数排序实例
Dec 18 Python
python中numpy基础学习及进行数组和矢量计算
Feb 12 Python
python3.6连接MySQL和表的创建与删除实例代码
Dec 28 Python
python matplotlib 注释文本箭头简单代码示例
Jan 08 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
Feb 26 Python
基于DataFrame筛选数据与loc的用法详解
May 18 Python
Python计算时间间隔(精确到微妙)的代码实例
Feb 26 Python
Python绘图之柱形图绘制详解
Jul 28 Python
如何在 Matplotlib 中更改绘图背景的实现
Nov 26 Python
python3代码输出嵌套式对象实例详解
Dec 03 Python
pycharm 实现光标快速移动到括号外或行尾的操作
Feb 05 Python
python中__slots__节约内存的具体做法
Jul 04 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中用PDO查询Mysql来避免SQL注入风险的方法
2013/04/25 PHP
深入file_get_contents与curl函数的详解
2013/06/25 PHP
php setcookie(name, value, expires, path, domain, secure) 参数详解
2013/06/28 PHP
laravel多条件查询方法(and,or嵌套查询)
2019/10/09 PHP
jQuery 插件 将this下的div轮番显示
2009/04/09 Javascript
jQuery+CSS 实现随滚动条增减的汽水瓶中的液体效果
2011/09/26 Javascript
40款非常有用的 jQuery 插件推荐(系列一)
2011/12/21 Javascript
js过滤特殊字符输入适合输入、粘贴、拖拽多种情况
2014/03/22 Javascript
jquery 3D 标签云示例代码
2014/06/12 Javascript
JavaScript获得url查询参数的方法
2015/07/02 Javascript
apply和call方法定义及apply和call方法的区别
2015/11/15 Javascript
jQuery插件实现多级联动菜单效果
2015/12/01 Javascript
JS功能代码集锦
2016/05/04 Javascript
javascript实现简易计算器的代码
2016/05/31 Javascript
BootStrap selectpicker
2016/06/20 Javascript
jquery对象和DOM对象的相互转换详解
2016/10/18 Javascript
jQuery选择器之表单元素选择器详解
2017/09/19 jQuery
node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能
2018/01/12 Javascript
小程序getLocation需要在app.json中声明permission字段
2019/04/04 Javascript
[01:31:22]Ti4 循环赛第四日附加赛LGD vs Mouz
2014/07/13 DOTA
python在命令行下使用google翻译(带语音)
2014/01/16 Python
Python获取单个程序CPU使用情况趋势图
2015/03/10 Python
Python使用回溯法子集树模板解决迷宫问题示例
2017/09/01 Python
Django Rest framework权限的详细用法
2019/07/25 Python
用Pelican搭建一个极简静态博客系统过程解析
2019/08/22 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
2020/06/01 Python
canvas 实现 github404动态效果的示例代码
2017/11/15 HTML / CSS
生态学毕业生自荐信
2013/10/27 职场文书
邮政员工辞职信
2014/01/16 职场文书
护士个人自我鉴定
2014/03/24 职场文书
2014年专项整治工作总结
2014/11/17 职场文书
Python如何解决secure_filename对中文不支持问题
2021/07/16 Python
java调用Restful接口的三种方法
2021/08/23 Java/Android
mongodb数据库迁移变更的解决方案
2021/09/04 MongoDB
bootstrapv4轮播图去除两侧阴影及线框的方法
2022/02/15 HTML / CSS
TypeScript 使用 Tuple Union 声明函数重载
2022/04/07 Javascript