From 089db2863f36075bb1bfac8f4f0b3a846eb15076 Mon Sep 17 00:00:00 2001 From: p36kxhw2t <3180321407@qq.com> Date: Sun, 30 Nov 2025 12:24:21 +0800 Subject: [PATCH] Update middleware.py --- src/DjangoBlog/blog/middleware.py | 68 +++++++++++++++---------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/src/DjangoBlog/blog/middleware.py b/src/DjangoBlog/blog/middleware.py index 94dd70c..7f829cf 100644 --- a/src/DjangoBlog/blog/middleware.py +++ b/src/DjangoBlog/blog/middleware.py @@ -1,42 +1,42 @@ -import logging -import time +import logging #ZNY 导入日志模块 +import time #ZNY 导入时间模块 -from ipware import get_client_ip -from user_agents import parse +from ipware import get_client_ip #ZNY 导入获取客户端IP的工具 +from user_agents import parse #ZNY 导入解析用户代理的工具 -from blog.documents import ELASTICSEARCH_ENABLED, ElaspedTimeDocumentManager +from blog.documents import ELASTICSEARCH_ENABLED, ElaspedTimeDocumentManager #ZNY 导入Elasticsearch配置和性能文档管理器 -logger = logging.getLogger(__name__) +logger = logging.getLogger(__name__) #ZNY 获取当前模块的日志记录器 -class OnlineMiddleware(object): - def __init__(self, get_response=None): - self.get_response = get_response - super().__init__() +class OnlineMiddleware(object): #ZNY 定义在线中间件类 + def __init__(self, get_response=None): #ZNY 初始化方法 + self.get_response = get_response #ZNY 存储get_response函数 + super().__init__() #ZNY 调用父类初始化 - def __call__(self, request): - ''' page render time ''' - start_time = time.time() - response = self.get_response(request) - http_user_agent = request.META.get('HTTP_USER_AGENT', '') - ip, _ = get_client_ip(request) - user_agent = parse(http_user_agent) - if not response.streaming: + def __call__(self, request): #ZNY 使实例可调用,处理请求 + ''' page render time ''' #ZNY 页面渲染时间统计 + start_time = time.time() #ZNY 记录请求开始时间 + response = self.get_response(request) #ZNY 调用后续中间件和视图处理请求 + http_user_agent = request.META.get('HTTP_USER_AGENT', '') #ZNY 获取用户代理字符串 + ip, _ = get_client_ip(request) #ZNY 获取客户端IP地址 + user_agent = parse(http_user_agent) #ZNY 解析用户代理信息 + if not response.streaming: #ZNY 如果不是流式响应 try: - cast_time = time.time() - start_time - if ELASTICSEARCH_ENABLED: - time_taken = round((cast_time) * 1000, 2) - url = request.path - from django.utils import timezone - ElaspedTimeDocumentManager.create( - url=url, - time_taken=time_taken, - log_datetime=timezone.now(), - useragent=user_agent, - ip=ip) - response.content = response.content.replace( - b'', str.encode(str(cast_time)[:5])) - except Exception as e: - logger.error("Error OnlineMiddleware: %s" % e) + cast_time = time.time() - start_time #ZNY 计算总处理时间 + if ELASTICSEARCH_ENABLED: #ZNY 如果Elasticsearch已启用 + time_taken = round((cast_time) * 1000, 2) #ZNY 转换为毫秒并保留两位小数 + url = request.path #ZNY 获取请求路径 + from django.utils import timezone #ZNY 导入时区工具 + ElaspedTimeDocumentManager.create( #ZNY 创建性能记录文档 + url=url, #ZNY 请求URL + time_taken=time_taken, #ZNY 耗时 + log_datetime=timezone.now(), #ZNY 当前时间 + useragent=user_agent, #ZNY 用户代理信息 + ip=ip) #ZNY IP地址 + response.content = response.content.replace( #ZNY 在响应内容中替换占位符 + b'', str.encode(str(cast_time)[:5])) #ZNY 将加载时间插入到指定位置 + except Exception as e: #ZNY 捕获异常 + logger.error("Error OnlineMiddleware: %s" % e) #ZNY 记录错误日志 - return response + return response #ZNY 返回响应对象