Pre Merge pull request !86 from JackLu2021/N/A

pull/86/MERGE
JackLu2021 2023-01-19 08:03:34 +00:00 committed by Gitee
commit eaed8501d0
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
1 changed files with 27 additions and 16 deletions

View File

@ -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]