exception.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  1. """
  2. 自定义异常处理
  3. 通过restformwork 的setting配置引用 REST_FRAMEWORK --> EXCEPTION_HANDLER
  4. """
  5. from rest_framework.views import exception_handler
  6. from rest_framework.views import Response
  7. from rest_framework import status
  8. from rest_framework.exceptions import ValidationError, ErrorDetail
  9. def custom_exception_handler(exc, context):
  10. response = exception_handler(exc, context)
  11. if response is None:
  12. return Response({
  13. 'code': status.HTTP_500_INTERNAL_SERVER_ERROR,
  14. 'msg': '{exc}'.format(exc=exc),
  15. 'data': ''
  16. }, status=status.HTTP_500_INTERNAL_SERVER_ERROR, exception=True)
  17. else:
  18. msg = '{exc}'.format(exc=exc)
  19. if isinstance(exc, ValidationError):
  20. for key, value in exc.get_full_details().items():
  21. if value and isinstance(value, list):
  22. value = value[0]["message"]
  23. if isinstance(value, ErrorDetail):
  24. msg = f"{key} {value}"
  25. return Response({
  26. 'code': response.status_code,
  27. 'msg': msg,
  28. 'data': ''
  29. }, status=200, exception=True)