requestRecord.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. # -*- coding: utf-8 -*-
  2. """
  3. @Time : 2021/9/22 17:08
  4. @Auth : Locky
  5. @File :requestRecord.py
  6. @IDE :PyCharm
  7. """
  8. import json
  9. import logging
  10. import time
  11. from django.utils.deprecation import MiddlewareMixin
  12. from Model.models import RequestRecordModel
  13. class RequestRecordMiddleware(MiddlewareMixin):
  14. def process_request(self, request):
  15. request.start_time = time.time()
  16. def process_response(self, request, response):
  17. execute_time = time.time() - request.start_time
  18. method = request.method
  19. url = request.path
  20. # 获取请求参数并转为字符串
  21. if method == 'GET':
  22. parameter = json.dumps(request.GET.dict())
  23. elif method == 'POST':
  24. parameter = json.dumps(request.POST.dict())
  25. else:
  26. parameter = ''
  27. if response.status_code == 500: # 处理没有捕获异常的情况
  28. request_record_data = {
  29. 'method': method,
  30. 'url': url,
  31. 'parameter': parameter,
  32. 'execute_time': execute_time,
  33. 'status_code': 500,
  34. 'reason_phrase': response.reason_phrase,
  35. }
  36. RequestRecordModel.objects.create(**request_record_data)
  37. elif response.content: # 处理捕获异常的情况
  38. print('content: ', response.content)
  39. content = eval(str(response.content, 'utf-8')) # bytes 转为 dict
  40. logger = logging.getLogger('info')
  41. logger.info('content: {}'.format(content))
  42. error_flag = False
  43. if 'result_code' in content and content['result_code'] == 500:
  44. reason_phrase = content['result']
  45. error_flag = True
  46. elif 'code' in content and content['code'] == 500: # ResponseObject.returntype == 'pc'
  47. reason_phrase = content['data']
  48. error_flag = True
  49. if error_flag:
  50. request_record_data = {
  51. 'method': method,
  52. 'url': url,
  53. 'parameter': parameter,
  54. 'execute_time': execute_time,
  55. 'status_code': 500,
  56. 'reason_phrase': reason_phrase,
  57. }
  58. RequestRecordModel.objects.create(**request_record_data)
  59. return response