理解Django中间件及其应用实例
# 导入Django中间件相关的模块
from django.utils.deprecation import MiddlewareMixin
class CustomMiddleware(MiddlewareMixin):
"""
自定义的Django中间件示例,用于记录每个请求的IP地址和路径。
"""
def process_request(self, request):
"""
在请求到达视图函数之前调用。
记录请求的IP地址和路径。
"""
ip_address = self.get_ip_address(request)
path = request.get_full_path()
print(f"Request from IP: {ip_address}, Path: {path}")
def process_response(self, request, response):
"""
在响应返回给用户之前调用。
这里没有对response做任何操作,直接返回。
"""
return response
@staticmethod
def get_ip_address(request):
"""
获取请求的IP地址,尝试从多个HTTP头部获取。
"""
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
ip_address = x_forwarded_for.split(',')[0]
else:
ip_address = request.META.get('REMOTE_ADDR')
return ip_address
这个示例中,我们定义了一个自定义的中间件CustomMiddleware
,它实现了process_request
方法来记录每个请求的IP地址和路径,并在控制台打印出来。同时,它也实现了process_response
方法,但在这里没有对响应做任何处理,直接返回。这个例子展示了如何在Django中编写简单的中间件,并在请求处理的不同阶段进行操作。
评论已关闭