| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 | # -*- coding: utf-8 -*-"""@Time : 2021/9/22 17:08@Auth : Locky@File :requestRecord.py@IDE :PyCharm"""import jsonimport loggingimport timefrom django.utils.deprecation import MiddlewareMixinfrom 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 method == 'GET':                parameter = json.dumps(request.GET.dict())            elif method == 'POST':                parameter = json.dumps(request.POST.dict())            else:                parameter = ''            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:     # 处理捕获异常的情况                # print('content: ', response.content)                content = eval(str(response.content, 'utf-8'))   # bytes 转为 dict                # logger = logging.getLogger('info')                # logger.info('content: {}'.format(content))                error_flag = False                if 'result_code' in content and content['result_code'] == 500:                    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
 |