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]