加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 网站设计 > 教程 > 正文

RESTful异常处理

发布时间:2024-01-04 00:00:31 所属栏目:教程 来源:DaWei
导读: “圣人千虑,必有一失”,程序也是如此。当 RESTful Web API 服务器发生异常,该如何处理呢?构建好的 RESTful Web API,客户端开发人员又该如何调用呢?这一节,我们就为大家一一
“圣人千虑,必有一失”,程序也是如此。当 RESTful Web API 服务器发生异常,该如何处理呢?构建好的 RESTful Web API,客户端开发人员又该如何调用呢?这一节,我们就为大家一一道来。

1.异常处理
当遇到异常时,Django Rest framework 会自动捕获,并按默认逻辑处理。我们也可以通过自定义异常处理函数来实现对异常的处理。

from rest_framework.views import exception_handler
def custom_exception_handler(exc, context):
    # 先调用REST framework默认的异常处理方法获得标准错误响应对象
    response = exception_handler(exc, context)
    # 在此处补充自定义的异常处理
    if response is not None:
        response.data['status_code'] = response.status_code
    return response
在配置文件中声明自定义的异常处理

REST_FRAMEWORK = {
    'EXCEPTION_HANDLER': 'my_project.my_app.utils.custom_exception_handler'
}
如果未声明,会采用默认的方式,如下

REST_FRAMEWORK = {
    'EXCEPTION_HANDLER': 'rest_framework.views.exception_handler'
}
例如:

补充上处理关于数据库的异常

from rest_framework.views import exception_handler as drf_exception_handler
from rest_framework import status
from django.db import DatabaseError
def exception_handler(exc, context):
    response = drf_exception_handler(exc, context)
    if response is None:
        view = context['view']
        if isinstance(exc, DatabaseError):
            print('[%s]: %s' % (view, exc))
            response = Response({'detail': '服务器内部错误'}, status=status.HTTP_507_INSUFFICIENT_STORAGE)
    return response
2.REST framework 提供的异常类
APIException 所有异常的父类;

ParseError 解析错误;

AuthenticationFailed 认证失败;

NotAuthenticated 尚未认证;

PermissionDenied 权限决绝;

NotFound 未找到;

MethodNotAllowed 请求方式不支持;

NotAcceptable 要获取的数据格式不支持;

Throttled 超过限流次数;

ValidationError 校验失败。

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章