# 对于前端来讲,后端即便报错,也要返回统一的格式,前端便于处理
{code:999,msg:'系统异常,请联系系统管理员'}
# 只要三大认证,视图类的方法出了异常,都会执行一个函数:rest_framework.views import exception_handler### 注意:exception_handler
# 如果异常对象是drf的APIException对象,就会返回Response
# exception_handler只处理了drf的异常,其它的异常需要我们自己处理
# 如果异常对象不是drf的APIException对象,就会返回None
# 补充:
-函数和方法的区别?
# 补充:
# isinstance() 判断一个对象是不是某个类的对象 isinstance(对象,类)
# issubclass() 判断一个类,是不是另一个类的子类
def common_exception_handler(exc, context):
# 只要走到这里,一定出异常了,我们正常的项目要记录日志(后面讲)
# 两种可能:一个是Response对象,一个是None
res = exception_handler(exc, context)
#exc就是错误对象 context 上下文对象
if res:
# 说明是drf的异常,它处理了
if isinstance(res.data, dict):
detail = res.data.get('detail')
else:
detail = res.data
return Response({'code': 998, 'msg': detail})
else:
# 说明是其它异常,它没有处理
# return Response({'code': 999, 'msg': '系统异常,请联系系统管理员'})
return Response({'code': 999, 'msg': str(exc)})
### 配置文件
REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'app01.excepitons.common_exception_handler',
}