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


人已赞赏
软件

Error: SHA256 mismatch mac svn安装报错【解决方法】

2020-12-23 10:48:52

软件

nodejs Error: listen EADDRINUSE :::1221【解决方法】

2020-12-23 11:08:16

'); })();