一、异常模块
重写异常模块目的是记录异常信息(项目上线)。
二、具体配置
分析:
-
在settings的drf配置中配置EXCEPTION_HANDLER,指向自定义的exception_handler函数
-
drf出现异常了,都会回调exception_handler函数,携带异常对象和异常相关信息内容
-
在exception_handler函数完成异常信息的返回以及异常信息的logging日志
例如:
#settings.py
REST_FRAMEWORK = {
# 异常模块
# 'EXCEPTION_HANDLER': 'rest_framework.views.exception_handler',
'EXCEPTION_HANDLER': 'api.utils.exception_handler',
}
#api/utils.py(自定义模块)
from rest_framework.response import Response
from rest_framework.views import exception_handler as drf_exception_handler
from rest_framework import status
def exception_handler(exc, context):
response = drf_exception_handler(exc, context)
if response is None: # drf没有处理的异常(服务器异常)
return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR, data={
'status': 7,
'exc': '%s' % exc
})
# 项目阶段,要记录到日志文件
return Response(status=response.status_code, data={
'status': 7,
# drf处理的客户端异常,原始处理方式是将异常信息放在response对象的data中,data的格式是{'datail': '具体的异常信息'}
'exc': '%s' % response.data.get('detail')
})
核心:
异常信息都需要被logging记录,所以需要自定义。
drf只处理客户端异常,服务器异常需要手动处理,统一处理结果。