Django rest framework 自定义异常处理
1.
在settings.py中需要添加的配置
1.install app中添加 'rest_framework',
2在settings中的 添加这个配置
REST_FRAMEWORK = { 'EXCEPTION_HANDLER':'common.restframework.xd_exceptions.custom_exception_handler', #这是使用自定制异常处理 }
xd_exceptions.py这里是异常处理函数
from rest_framework.views import exception_handler def custom_exception_handler(exc, context): # Call REST framework's default exception handler first, # to get the standard error response. response = exception_handler(exc, context) # Now add the HTTP status code to the response. if response is not None: response.data['status_code'] = response.status_code print(response.data) # response.data['message'] =response.data['detail'] #增加message这个key # response.data['message'] ='方法不对' #增加message这个key return response
自定义异常类 在主动抛出异常的时候就可以抛出一个下边类型的异常
my_errors.py
from rest_framework import status from rest_framework.exceptions import APIException from common.tools import xd_status # class ParseError(APIException): # status_code = xd_status.HTTP_400_BAD_REQUEST # default_detail = '这是.default_detail========' # default_code = 'parse_error' # class XdError(APIException): pass class ParamError(XdError): status_code = 400 class Unauthorized(XdError): status_code = 401 class PermissionDenied(XdError): status_code = 403 class ObjectNotFound(XdError): status_code = 404 class ServerError(XdError): status_code = 500 class ErrorCode: UNAUTHORIZED = 10000 # 未登录 PERMISSION_DENIED = 10001 # 无权限 PARAM_ERROR = 40000 # 参数验证错误 DATA_NOT_FOUND = 40001 # 未找到数据 DATA_NOT_VALID = 40002 # 数据错误 REPEAT_POST = 40003 # 重复提交 EEEE = 40003 # 新型错误
在视图或函数中主动抛出异常,
class SupserUserDetailView(APIView): # authentication_classes = [] permission_classes = [SupserPermisson,] def put(self,request,pk): if not request.user.is_superuser: if request.user.id != pk: raise ParamError('用户没有修改权限', ErrorCode.EEEE) #这就是抛出自定义异常, 然后自己的异常捕获方式就能捕获这个异常 user = User.objects.filter(id=pk) if not user: raise ParamError('被修改的用户不存在', ErrorCode.EEEE) data = handel_c_user(request.data) user_obj = Creat_newuser_serializers(data=data, instance=user.first()) if user_obj.is_valid(): user_obj.save() res={'status':"修改成功"} return JsonResponse(data=res, code=200, desc="success", status=status.HTTP_200_OK) res = {'status':user_obj.errors} return JsonResponse(data=res,code=200,desc="success",status=status.HTTP_200_OK)
工作流程
访问触发异常
自动抛出自定制异常
自定义异常捕获函数捕获到异常并将用户友好的数据返回给前端
浙公网安备 33010602011771号