Django 解决开发自定义抛出异常的问题
在开发过程中,针对用户输入的不合法信息,我们应该在后端进行数据验证,并抛出相关的异常传递到前端来提示用户。
可是如何进行自定义抛出异常信息呢?通常处理方法有三种,我将依次介绍这三种方法。
第一种方法:
这种方法最为简单,只需要创建一个字典对象,通过render传到前端即可。
字典对象如下:
result={'code':'','message':''}
render(request,'xxx.html',result:result)
第二种方法:
需要继承Exception类,代码如下:
#利用继承自定义异常提示信息 classMyException(Exception): def__init__(self,code,error,data): self.code=code self.error=error self.data=data try: ifnot1<0: raiseMyException(1001,'你的说法错误','1不小于0') exceptMyExceptionase: pass
第三种方法:
自定义一个继承object的类
classMyTest(object): def__init__(self): #自定义状态码 self.code=1000 self.error='' self.data='' @property defdict(self): returnself.__dict__
在你需要自定义异常的时候,创建一个对象,并制定相关信息。
#创建实例对象 one=MyTest() one.code=1001 one.error='你错了' one.data='请再次检查' print(one.dict)
综上所述是笔者常用来在后端检验数据并抛出相关异常信息的三种方法。
补充知识:Djangorestframework自定义异常处理
1.
在settings.py中需要添加的配置
1.installapp中添加'rest_framework',
2.在settings中的添加这个配置
REST_FRAMEWORK={
'EXCEPTION_HANDLER':'common.restframework.xd_exceptions.custom_exception_handler',#这是使用自定制异常处理
}
xd_exceptions.py这里是异常处理函数
fromrest_framework.viewsimportexception_handler defcustom_exception_handler(exc,context): #CallRESTframework'sdefaultexceptionhandlerfirst, #togetthestandarderrorresponse. response=exception_handler(exc,context) #NowaddtheHTTPstatuscodetotheresponse. ifresponseisnotNone: response.data['status_code']=response.status_code print(response.data) #response.data['message']=response.data['detail']#增加message这个key #response.data['message']='方法不对'#增加message这个key returnresponse
自定义异常类在主动抛出异常的时候就可以抛出一个下边类型的异常
my_errors.py
fromrest_frameworkimportstatus fromrest_framework.exceptionsimportAPIException fromcommon.toolsimportxd_status #classParseError(APIException): #status_code=xd_status.HTTP_400_BAD_REQUEST #default_detail='这是.default_detail========' #default_code='parse_error' # classXdError(APIException): pass classParamError(XdError): status_code=400 classUnauthorized(XdError): status_code=401 classPermissionDenied(XdError): status_code=403 classObjectNotFound(XdError): status_code=404 classServerError(XdError): status_code=500 classErrorCode: UNAUTHORIZED=10000#未登录 PERMISSION_DENIED=10001#无权限 PARAM_ERROR=40000#参数验证错误 DATA_NOT_FOUND=40001#未找到数据 DATA_NOT_VALID=40002#数据错误 REPEAT_POST=40003#重复提交 EEEE=40003#新型错误
在视图或函数中主动抛出异常,
classSupserUserDetailView(APIView): #authentication_classes=[] permission_classes=[SupserPermisson,] defput(self,request,pk): ifnotrequest.user.is_superuser: ifrequest.user.id!=pk: raiseParamError('用户没有修改权限',ErrorCode.EEEE)#这就是抛出自定义异常,然后自己的异常捕获方式就能捕获这个异常 user=User.objects.filter(id=pk) ifnotuser: raiseParamError('被修改的用户不存在',ErrorCode.EEEE) data=handel_c_user(request.data) user_obj=Creat_newuser_serializers(data=data,instance=user.first()) ifuser_obj.is_valid(): user_obj.save() res={'status':"修改成功"} returnJsonResponse(data=res,code=200,desc="success",status=status.HTTP_200_OK) res={'status':user_obj.errors} returnJsonResponse(data=res,code=200,desc="success",status=status.HTTP_200_OK)
工作流程
访问触发异常
自动抛出自定制异常
自定义异常捕获函数捕获到异常并将用户友好的数据返回给前端
以上这篇Django解决开发自定义抛出异常的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。