exctptions.py
from rest_framework.views import exception_handlerfrom .response import APIResponse # 封装的Responsefrom .logger import get_logger # 封装的日志import traceback # 详细的报错模块logger = get_logger('django') # 封装的日志调用def custom_exception_handler(exc, context): ''' :param exc: 报错原因:list index out of range :param context: 报错详情:{'view': <home.views.TestView object at 0x7f857020cc70>, 'args': (), 'kwargs': {}, 'request': <rest_framework.request.Request: GET '/testView/'>} :return: ''' response = exception_handler(exc, context) res = APIResponse(code=999, msg=response.data) if response is None: # 出了异常 res = APIResponse(code=999, msg='系统错误') # 给前端看的 logger.error('服务器错误->错误原因:%s; 出错的view是:%s; 请求地址是:%s; 详细信息:%s' % ( str(exc), str(context['view']), str(context['request'].get_full_path()), traceback.format_exc() # 最详细的报错信息 )) # 记录日志 return res
settings.py
REST_FRAMEWORK = { 'EXCEPTION_HANDLER': 自定义的文件路径, # 全局异常配置}
调用
from rest_framework.exceptions import ValidationError# 全局异常 和 raise ValidationError() 都会被捕捉