| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 | # -*- coding: utf-8 -*-"""@Time : 2021/9/22 17:08@Auth : Locky@File :requestRecord.py@IDE :PyCharm"""import jsonimport timefrom django.utils.deprecation import MiddlewareMixinfrom Ansjer.config import LOGGERfrom Model.models import RequestRecordModelclass RequestRecordMiddleware(MiddlewareMixin):    def process_request(self, request):        request.start_time = time.time()    def process_response(self, request, response):        try:            execute_time = time.time() - request.start_time            method = request.method            url = request.path            if url != '/cloudstorage/getsignsts':                # 获取请求参数并转为字符串                if method == 'GET':                    parameter = json.dumps(request.GET.dict())                elif method == 'POST':                    parameter = json.dumps(request.POST.dict())                else:                    parameter = ''                content = eval(str(response.content, 'utf-8'))  # bytes 转为 dict                # 记录响应码不为0的接口日志                if ('result_code' in content and content['result_code'] != 0) or \                        ('code' in content and content['code'] != 0):                    LOGGER.info('请求路径:{}, 请求方式:{}, 输入数据:{}, 输出数据:{}, 响应状态:{}'.                                format(url, method, parameter, content, response.status_code))                if response.status_code == 500:  # 处理没有捕获异常的情况                    request_record_data = {                        'method': method,                        'url': url,                        'parameter': parameter,                        'execute_time': execute_time,                        'status_code': 500,                        'reason_phrase': response.reason_phrase,                    }                    RequestRecordModel.objects.create(**request_record_data)                elif response.content:  # 处理捕获异常的情况                    error_flag = False                    reason_phrase = ''                    if 'result_code' in content and (content['result_code'] == 500 or content['result_code'] == 474):                        reason_phrase = content['result']                        error_flag = True                    elif 'code' in content and content['code'] == 500:  # ResponseObject.returntype == 'pc'                        reason_phrase = content['data']                        error_flag = True                    if error_flag:                        request_record_data = {                            'method': method,                            'url': url,                            'parameter': parameter,                            'execute_time': execute_time,                            'status_code': 500,                            'reason_phrase': reason_phrase,                        }                        RequestRecordModel.objects.create(**request_record_data)        finally:            return response
 |