From ceb7138f83a4f52e5487c91c502c6198bfbe75d8 Mon Sep 17 00:00:00 2001 From: JackLu2021 <675599689@qq.com> Date: Thu, 19 Jan 2023 08:03:33 +0000 Subject: [PATCH] =?UTF-8?q?update=20backend/dvadmin/utils/middleware.py.?= =?UTF-8?q?=20=E4=BC=98=E5=8C=96=E5=AF=BC=E5=87=BA=E7=9A=84=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: JackLu2021 <675599689@qq.com> --- backend/dvadmin/utils/middleware.py | 43 ++++++++++++++++++----------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/backend/dvadmin/utils/middleware.py b/backend/dvadmin/utils/middleware.py index 5443d14..cf456fd 100644 --- a/backend/dvadmin/utils/middleware.py +++ b/backend/dvadmin/utils/middleware.py @@ -2,6 +2,7 @@ 日志 django中间件 """ import json +from urllib.parse import unquote from django.conf import settings from django.contrib.auth.models import AnonymousUser @@ -22,6 +23,7 @@ class ApiLoggingMiddleware(MiddlewareMixin): self.enable = getattr(settings, 'API_LOG_ENABLE', None) or False self.methods = getattr(settings, 'API_LOG_METHODS', None) or set() self.operation_log_id = None + self.url_map = getattr(settings, 'API_LOG_URL_MAP', None) or set() @classmethod def __handle_request(cls, request): @@ -32,6 +34,18 @@ class ApiLoggingMiddleware(MiddlewareMixin): def __handle_response(self, request, response): # request_data,request_ip由PermissionInterfaceMiddleware中间件中添加的属性 body = getattr(request, 'request_data', {}) + user = get_request_user(request) + info = { + 'request_ip': getattr(request, 'request_ip', 'unknown'), + 'creator': user if not isinstance(user, AnonymousUser) else None, + 'dept_belong_id': getattr(request.user, 'dept_id', None), + 'request_method': request.method, + 'request_path': request.request_path, + 'request_body': body, + 'request_os': get_os(request), + 'request_browser': get_browser(request), + 'request_msg': request.session.get('request_msg'), + } # 请求含有password则用*替换掉(暂时先用于所有接口的password请求参数) if isinstance(body, dict) and body.get('password', ''): body['password'] = '*' * len(body['password']) @@ -41,23 +55,20 @@ class ApiLoggingMiddleware(MiddlewareMixin): if not response.data and response.content: content = json.loads(response.content.decode()) response.data = content if isinstance(content, dict) else {} + info.update({ + 'response_code': response.data.get('code'), + 'status': True if response.data.get('code') in [2000, ] else False, + 'json_result': {"code": response.data.get('code'), "msg": response.data.get('msg')}, + }) except Exception: - return - user = get_request_user(request) - info = { - 'request_ip': getattr(request, 'request_ip', 'unknown'), - 'creator': user if not isinstance(user, AnonymousUser) else None, - 'dept_belong_id': getattr(request.user, 'dept_id', None), - 'request_method': request.method, - 'request_path': request.request_path, - 'request_body': body, - 'response_code': response.data.get('code'), - 'request_os': get_os(request), - 'request_browser': get_browser(request), - 'request_msg': request.session.get('request_msg'), - 'status': True if response.data.get('code') in [2000, ] else False, - 'json_result': {"code": response.data.get('code'), "msg": response.data.get('msg')}, - } + try: + # 导出接口记录日志 + if response['content-disposition'] is not None: + info.update({ + 'json_result': unquote(response['content-disposition']) + }) + except Exception: + print('') operation_log, creat = OperationLog.objects.update_or_create(defaults=info, id=self.operation_log_id) if not operation_log.request_modular and settings.API_MODEL_MAP.get(request.request_path, None): operation_log.request_modular = settings.API_MODEL_MAP[request.request_path]