exctptions.py

  1. from rest_framework.views import exception_handler
  2. from .response import APIResponse # 封装的Response
  3. from .logger import get_logger # 封装的日志
  4. import traceback # 详细的报错模块
  5. logger = get_logger('django') # 封装的日志调用
  6. def custom_exception_handler(exc, context):
  7. '''
  8. :param exc: 报错原因:list index out of range
  9. :param context: 报错详情:{'view': <home.views.TestView object at 0x7f857020cc70>, 'args': (), 'kwargs': {}, 'request': <rest_framework.request.Request: GET '/testView/'>}
  10. :return:
  11. '''
  12. response = exception_handler(exc, context)
  13. res = APIResponse(code=999, msg=response.data)
  14. if response is None:
  15. # 出了异常
  16. res = APIResponse(code=999, msg='系统错误') # 给前端看的
  17. logger.error('服务器错误->错误原因:%s; 出错的view是:%s; 请求地址是:%s; 详细信息:%s' % (
  18. str(exc),
  19. str(context['view']),
  20. str(context['request'].get_full_path()),
  21. traceback.format_exc() # 最详细的报错信息
  22. )) # 记录日志
  23. return res

settings.py

  1. REST_FRAMEWORK = {
  2. 'EXCEPTION_HANDLER': 自定义的文件路径, # 全局异常配置
  3. }

调用

  1. from rest_framework.exceptions import ValidationError
  2. # 全局异常 和 raise ValidationError() 都会被捕捉