python Django自定义错误处理机制【附代码】

今天爱分享给大家带来python Django自定义错误处理机制【附代码】,希望能够帮助到大家。

一、继承Exception错误处理机制

使用Exception错误处理机制。继承后,在View.py里面使用raise捕获异常,需要使用 [ try: exception 自定义的异常类 :]才能正常使用,不够灵活,使用方法如下:

#####  my_exception.py  #####
# 利用继承自定义异常提示信息
classMyException(Exception):
def__init__(self,code,error,data):
self.code=code
self.error=error
self.data=data
##### view.py #####
try:
if not 1<0:
raiseMyException(1001,'你的说法错误','1不小于0')
except MyExceptionase:
pass

二、使用rest_framework的错误处理机制

查询了很多资料,都需要在settiong.py添加如下配置:

REST_FRAMEWORK= {
'EXCEPTION_HANDLER':'common.restframework.xd_exceptions.custom_exception_handler',#这是使用自定制异常处理
}

并编辑自定义的异常处理函数

#####  xd_exceptions.py #####
fromrest_framework.viewsimportexception_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

通过本人实践,其实并不用以上两步,下面进入正题。

继承rest_framework.exceptions 的 APIException 自定义异常处理机制

#####  exceptions.py #####
"""自定义异常"""
from rest_framework.exceptions import APIException
from rest_framework import status
class BaseError(APIException):
"""自定义异常基础类"""
def__init__(self,detail=None,status_code=status.HTTP_400_BAD_REQUEST):
self.detail=detail# 输出的错误信息,可以是字典型,也可以是字符串型
self.status_code=status_code# 响应的状态码
class DefaultError(BaseError):
"""默认异常,自定义使用,返回状态-1,响应状态400"""
def__init__(self,message=None,code=-1):
detail= {'code':code,'message':message}# 继承BaseError,传给self.detail
super(DefaultError,self).__init__(detail)
#####  view.py #####
from rest_framework.views import APIView
class Register(APIView):# 注意这里必须使用APIView,不能使用View,这里作者踩了坑
@staticmethod
defpost(r):
username=r.POST.get('username')
password=r.POST.get('password')
db_user=UserModels.objects.filter(username=username,password=password).first()
if not db_user:
msg='用户名或密码错误'
raise DefaultError()# 这里就可以直接捕获并弹出异常
return db_user.id
IT技术分享与交流
我还没有学会写个人说明!
上一篇

FAA在环评报告中披露了SpaceX星舰基地的更多细节

下一篇

诺兰曾尝试将《盗梦空间》改编成游戏 可没结果 但仍有很大兴趣

你也可能喜欢

评论已经被关闭。

插入图片