DJANGO 中间件的白名单配置

server/2025/3/30 14:55:11/

在处理白名单内的多个 Apps 的 URL 链接时,可以采用以下几种方法来简化白名单的配置:

1. 使用 reverse 动态获取 URL

如果你在 urls.py 中为每个 App 的 URL 定义了名称(name 参数),可以使用 reverse 函数动态获取这些 URL,而不是硬编码路径。这样可以避免手动维护大量的路径字符串。

Python复制

from django.urls import reverseclass LoginRequiredMiddleware:def __init__(self, get_response):self.get_response = get_responsedef __call__(self, request):# 动态获取白名单中的 URLwhite_list = [reverse('login'),  # 登录页面reverse('logout'),  # 注销页面reverse('admin:index'),  # Django 管理页面# 其他 App 的 URL 名称reverse('app1:view1'),reverse('app2:view2'),]# 如果用户未登录且请求的路径不在白名单中,重定向到登录页面if not request.user.is_authenticated and request.path not in white_list:return redirect('login')response = self.get_response(request)return response

2. 使用 URL 前缀匹配

如果你的多个 App 的 URL 都有共同的前缀,可以通过前缀匹配来简化白名单的配置。例如,所有以 /public/ 开头的 URL 都不需要登录。

Python复制

class LoginRequiredMiddleware:def __init__(self, get_response):self.get_response = get_responsedef __call__(self, request):# 白名单前缀white_list_prefixes = ['/login/','/logout/','/admin/','/public/',  # 所有以 /public/ 开头的 URL]# 检查请求路径是否以白名单前缀开头if any(request.path.startswith(prefix) for prefix in white_list_prefixes):# 如果路径以白名单前缀开头,直接放行passelif not request.user.is_authenticated:# 如果用户未登录且路径不在白名单中,重定向到登录页面return redirect('login')response = self.get_response(request)return response

3. 使用正则表达式匹配

对于更复杂的匹配需求,可以使用正则表达式来匹配多个路径模式。

Python复制

import reclass LoginRequiredMiddleware:def __init__(self, get_response):self.get_response = get_responsedef __call__(self, request):# 使用正则表达式定义白名单white_list_patterns = [re.compile(r'^/login/$'),  # 匹配 /login/re.compile(r'^/logout/$'),  # 匹配 /logout/re.compile(r'^/admin/'),  # 匹配 /admin/ 开头的路径re.compile(r'^/public/'),  # 匹配 /public/ 开头的路径]# 检查请求路径是否匹配白名单中的正则表达式if any(pattern.match(request.path) for pattern in white_list_patterns):# 如果路径匹配白名单中的正则表达式,直接放行passelif not request.user.is_authenticated:# 如果用户未登录且路径不在白名单中,重定向到登录页面return redirect('login')response = self.get_response(request)return response

4. 集中管理白名单

如果你的项目中有多个中间件都需要使用白名单,可以将白名单的配置提取到一个单独的文件中,方便集中管理和维护。

Python复制

# myproject/settings.py
# 定义白名单配置
WHITE_LIST_URLS = ['login','logout','admin:index','app1:view1','app2:view2',
]# myapp/middleware.py
from django.urls import reverse
from django.conf import settingsclass LoginRequiredMiddleware:def __init__(self, get_response):self.get_response = get_response# 动态生成白名单 URL 列表self.white_list = [reverse(url_name) for url_name in settings.WHITE_LIST_URLS]def __call__(self, request):# 如果用户未登录且请求的路径不在白名单中,重定向到登录页面if not request.user.is_authenticated and request.path not in self.white_list:return redirect('login')response = self.get_response(request)return response

通过以上方法,可以更灵活、更简洁地管理白名单中的多个 Apps 的 URL 链接,减少硬编码和重复配置。


http://www.ppmy.cn/server/179090.html

相关文章

Java高并发容器的内核解析:从无锁算法到分段锁的架构演进

《Java高并发容器的内核解析:从无锁算法到分段锁的架构演进》 本文将以JUC包核心容器为切入点,深入剖析ConcurrentHashMap在Java 8中的64位Hash分段技术,解密LinkedBlockingQueue双锁队列设计的吞吐量秘密,并给出各容器在亿级流量…

微信小程序中使用Less样式方法

在微信小程序中使用Less样式,可以通过以下步骤实现。主要原理是借助Visual Studio Code(VSCode)的插件将Less文件自动编译为小程序支持的.wxss文件,或通过微信开发者工具的扩展功能直接集成Less编译环境。以下是具体方法&#xff…

Zookeeper 核心原理详解以及快速搭建

一、引言 Zookeeper 是 Apache 开源的分布式协调服务,专为分布式系统提供一致性、高可用性和容错能力。其核心设计目标是通过简单的接口(如文件系统目录树结构)实现复杂的分布式一致性协议,帮助开发者解决分布式环境下的协调难题…

3. 轴指令(omron 机器自动化控制器)——>MC_CamIn

机器自动化控制器——第三章 轴指令 14 MC_CamIn变量▶输入变量▶输出变量▶输入输出变量 功能说明▶指令详情▶时序图▶指令的中止▶重启运动指令▶多重启动运动指令▶异常 示例程序1▶参数设定▶动作示例▶梯形图▶结构文本(ST)▶示例程序2▶参数设定▶动作示例▶梯形图▶结构…

机器学习-04-分类算法-02贝叶斯算法案例

总结 本系列是机器学习课程的系列课程,主要介绍机器学习中分类算法,本篇为分类算法与贝叶斯算法部分。 本门课程的目标 完成一个特定行业的算法应用全过程: 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算法评估持续调优工程…

Milvus vs. ElasticSearch:向量库检索性能测试

目录 1. 构建检索库2. 测试条件3. 测试结果4. 性能分析5. 结论 1. 构建检索库 构建通用场景库总计约2万张。构建车辆数据库总计约12万张。构建公共数据库,包括Flickr30k、COCO、nlvr2、vqa等数据集约43万张。 2. 测试条件 环境说明:分别单机部署Milvu…

基于Spring Boot的可信捐赠系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

关于CNN,RNN,GAN,GNN,DQN,Transformer,LSTM,DBN你了解多少

以下是神经网络中常见的几种模型的简要介绍: 1. ​CNN (Convolutional Neural Network, 卷积神经网络) ​用途: 主要用于图像处理和计算机视觉任务。​特点: 通过卷积核提取局部特征,具有平移不变性,能够有效处理高维数据(如图像…