middleware.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. from django.utils.deprecation import MiddlewareMixin
  2. from rest_framework.exceptions import ErrorDetail
  3. from django.http import JsonResponse
  4. class ResponseMiddleware(MiddlewareMixin):
  5. def process_response(self, request, response):
  6. """在每个响应返回给客户端之前自动调用"""
  7. if request.path.startswith('/equipmanager/'):
  8. # if isinstance(response, JsonResponse):
  9. # return response
  10. status_code = response.status_code
  11. rsp_data = response.data
  12. if status_code == 200:
  13. response = JsonResponse(
  14. status=200,
  15. data={"code":status_code,"msg":"请求成功","data":rsp_data}
  16. )
  17. elif status_code == 400:
  18. if isinstance(rsp_data, dict):
  19. try:
  20. for key, value in rsp_data.items():
  21. print(key, value, type(value[0]))
  22. if value and isinstance(value, list):
  23. value = value[0]
  24. if isinstance(value, ErrorDetail):
  25. value = f"{key} {value}"
  26. response = JsonResponse(
  27. status=200,
  28. data={'msg': str(value),'code': status_code,'data': ""}
  29. )
  30. break
  31. except Exception as e:
  32. pass
  33. elif status_code == 404:
  34. response = JsonResponse(
  35. status=200,
  36. data={"code":status_code,"msg":"请求接口不存在","data":""}
  37. )
  38. return response
  39. def process_exception(self, request, exception):
  40. data = {
  41. 'msg': str(exception),
  42. 'code': 500,
  43. 'data': ""
  44. }
  45. return JsonResponse(status=500, data=data)