目次Django中心件(Middleware)是一段在Django的哀求/相应处置惩罚过程中,可以参与并改变哀求或相应的代码。中心件是Django框架中一个非常强盛的功能,它答应你在Django的视图函数之前或之后执行自定义代码。 中心件可以用于:
Django中心件的工作原理是,中心件以一个有序列表的形式存在,Django会按照这个列表的次序调用中心件。 创建中心件要创建一个中心件,你需要定义一个Python类,该类包罗若干个特定的方法。最常用的方法有:
示例下面是一个简单的中心件示例,它会在每个哀求的相应中添加一个自定义的HTTP头部: [code]class SimpleMiddleware: def __init__(self, get_response): self.get_response = get_response def __call__(self, request): # 在视图函数之前执行的代码 response = self.get_response(request) # 在视图函数之后执行的代码 response['X-Custom-Header'] = 'Custom Value' return response[/code]利用中心件要利用中心件,你需要将它添加到你的Django项目标[code]settings.py[/code]文件中的[code]MIDDLEWARE[/code]列表中: [code]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', 'myapp.middleware.SimpleMiddleware', # 添加你的中心件 ... ][/code]确保中心件的次序符合你的业务逻辑需求。 留意事项
通过中心件,你可以为Django应用添增强盛的功能和灵活性。 过滤哀求在Django中,中心件可以用来过滤哀求和记载日志。这通常涉及到两个方面:哀求处置惩罚和相应处置惩罚。下面我将介绍如何利用中心件来实现这两个功能。 过滤哀求+记载日志过滤哀求通常是指在哀求到达视图函数之前,根据某些条件决定是否答应哀求继续进行。比方,你可能想要实现一个简单的访问控制,只答应来自特定IP地址的哀求通过。 下面是一个简单的中心件示例,它检查哀求的泉源IP地址,并拒绝非授权的IP: [code]class IPFilterMiddleware: def __init__(self, get_response): self.get_response = get_response def __call__(self, request): # 定义答应的IP地址列表 allowed_ips = ['192.168.1.1', '127.0.0.1'] # 获取哀求的IP地址 x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') if x_forwarded_for: ip = x_forwarded_for.split(',')[0] else: ip = request.META.get('REMOTE_ADDR') # 检查IP是否在答应的列表中 if ip not in allowed_ips: # 假如不在答应的列表中,返回403克制访问 from django.http import HttpResponseForbidden return HttpResponseForbidden("You are not allowed to access this site.") # 继续处置惩罚哀求 response = self.get_response(request) return response[/code]记载日志记载日志是中心件的另一个常见用途。你可以记载哀求的详细信息,比如哀求的URL、方法、IP地址等,这对于调试和监控应用非常有效。 下面是一个简单的日志记载中心件示例: [code]import datetime class LoggingMiddleware: def __init__(self, get_response): self.get_response = get_response def __call__(self, request): # 哀求到达的时间 start_time = datetime.datetime.now() # 处置惩罚哀求 response = self.get_response(request) # 哀求竣事的时间 end_time = datetime.datetime.now() # 记载日志 logger = logging.getLogger(__name__) logger.info( f'Status Code: {response.status_code} ' f'| Method: {request.method} ' f'| Path: {request.path} ' f'| Time: {(end_time - start_time).total_seconds()}s' ) return response[/code]配置中心件要利用这些中心件,你需要将它们添加到你的Django项目标[code]settings.py[/code]文件中的[code]MIDDLEWARE[/code]列表中: [code]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', 'myapp.middleware.IPFilterMiddleware', # 添加IP过滤中心件 'myapp.middleware.LoggingMiddleware', # 添加日志记载中心件 ... ][/code]确保中心件的次序符合你的业务逻辑需求。 留意事项
通过公道地利用中心件,你可以有效地控制哀求的访问和记载详细的日志信息,这对于维护和监控Django应用非常有帮助。 到此这篇关于Django中心件Middleware的文章就介绍到这了,更多相干Django中心件Middleware内容请搜索脚本之家从前的文章或继续欣赏下面的相干文章希望大家以后多多支持脚本之家! 来源:https://www.jb51.net/python/328347lbx.htm 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|手机版|小黑屋|梦想之都-俊月星空
( 粤ICP备18056059号 )|网站地图
GMT+8, 2025-7-1 18:49 , Processed in 0.038872 second(s), 20 queries .
Powered by Mxzdjyxk! X3.5
© 2001-2025 Discuz! Team.