handler.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. #coding=utf-8
  2. from rest_framework.views import exception_handler
  3. from rest_framework import serializers
  4. from rest_framework.exceptions import AuthenticationFailed,NotAuthenticated
  5. from jwt.exceptions import ExpiredSignatureError
  6. from .exceptions import CustomError
  7. from utils import response_error
  8. import traceback
  9. def custom_exception_handler(exc, context):
  10. message = ''
  11. errcode = None
  12. if isinstance(exc, CustomError):
  13. message = exc.get_error_msg()
  14. elif isinstance(exc, serializers.ValidationError):
  15. if isinstance(exc.detail, list):
  16. message = exc.detail[0]
  17. elif isinstance(exc.detail, dict):
  18. for key, value in exc.detail.items():
  19. if key != "error":
  20. message += key+"错误:"
  21. message += value[0]
  22. else:
  23. message = list(exc.detail)[0]
  24. elif isinstance(exc, AuthenticationFailed) or isinstance(exc, ExpiredSignatureError):
  25. message = str(exc)
  26. errcode = 460
  27. elif isinstance(exc, NotAuthenticated):
  28. message = str(exc)
  29. errcode = 460
  30. else:
  31. traceback.print_exc()
  32. message = str(exc)
  33. return response_error(message, errcode=errcode)