一.在setting.py的REST_FRAMEWORK中配置异常捕获函数
REST_FRAMEWORK = {
'EXCEPTION_HANDLER' : 'exceptions.exception' ,
}
exception为异常捕获逻辑代码
2.导包
import json
from rest_framework. exceptions import ValidationError
from rest_framework. views import exception_handler
from django. db import DatabaseError
from redis. exceptions import RedisError
from rest_framework. response import Response
三.异常处理逻辑
def exception ( exc, context) :
response = exception_handler( exc, context)
if response is None :
view = context[ 'view' ]
if isinstance ( exc, DatabaseError) or isinstance ( exc, RedisError) :
response = Response( { "code" : 1000 , 'msg' : '数据库错误' } )
else :
response = Response( { "code" : 1000 , 'msg' : '服务器未知错误' } )
return response
else :
'''drf内部错误'''
detail = response. data. get( 'detail' )
non_field_errors = response. data. get( 'non_field_errors' )
if response. status_code == 403 :
return response
if detail:
return Response( { "code" : 1001 , "msg" : detail} )
if non_field_errors:
return Response( { "code" : 1001 , "msg" : non_field_errors[ 0 ] } )
if isinstance ( exc, ValidationError) :
errors_list = [ e for e in exc. detail. values( ) ]
return Response( { "code" : 1001 , "msg" : json. dumps( exc. detail, ensure_ascii= False ) . replace( "\"" , "" ) } )
else :
return Response( { "code" : 1001 , "msg" : "其他问题" } )