DRF:自定义来自API的异常消息

米歇尔·J·罗伯茨

我开始更深入地研究DRF,我想知道我想开始自定义错误消息,该错误消息通过API获得不正确的权限返回,我想包装一些额外的细节。

例如,如果未为受权限限制的端点提供身份验证凭据,则API返回:

{
    "detail": "Authentication credentials were not provided."
}

这来自线171自rest_framework.exceptionshttps://github.com/encode/django-rest-framework/blob/master/rest_framework/exceptions.py真的,我希望这与

{
    "success": false,
    "message": "Authentication credentials were not provided.",
    "data": null
}

因此,我假设我现在需要开始自定义自己的异常。

我应该如何最好地做到这一点?

也许它与default_error_messages = {}串行器内部有联系...

恩里克萨尔瓦罗

您可以在以下位置覆盖DRF的默认异常处理程序和JSON解析器settings.py

REST_FRAMEWORK = {
    ...
    'EXCEPTION_HANDLER': 'helpers.exceptions.custom_exception_handler',
    'DEFAULT_RENDERER_CLASSES': [
        'helpers.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
    ]
}

然后,只需自定义如何处理异常以及如何呈现响应即可:

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)
    # Customize your exception handling here
    return response

而且,您可以使用自定义JSON渲染器,以防您需要对响应进行任何其他格式化,在我的情况下,我必须向有效负载添加“ status_code”:

class JSONRenderer(BaseJsonRenderer):
    def render(self, data, accepted_media_type=None, renderer_context=None):
        """
        Render `data` into JSON, returning a bytestring.
        """
        <Base code from the original class...>

        response = renderer_context.get('response')
        if response and 200 <= response.status_code <= 299 and 'status_code' not in response.data:
            response.data = Errors.success(response.data)

        <Base code from the original class...>

Errors.success(response.data)只是将成功状态代码合并到数据的一种简单方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

发生异常后,显示来自liferay挂钩服务的自定义错误消息

来自分类Dev

捕获异常并返回自定义消息

来自分类Dev

自定义异常消息C#

来自分类Dev

sqlalchemy 中的自定义异常消息

来自分类Dev

在DRF中拒绝权限时返回自定义消息

来自分类Dev

如何在getway超时时显示来自API网关的自定义错误消息?

来自分类Dev

根据模型验证来自定义设计Flash消息

来自分类Dev

传递来自 JSF 自定义组件的验证消息

来自分类Dev

如何正确创建带有消息的自定义异常?

来自分类Dev

为功能异常引发自定义消息

来自分类Dev

FOSRestBundle:显示我的自定义异常消息

来自分类Dev

Python 3.4中的自定义异常代码和消息

来自分类Dev

Python自定义异常未以正确的语法提供消息

来自分类Dev

在自定义异常类中设置(半)默认消息

来自分类Dev

@NotEmpty不显示自定义的异常消息

来自分类Dev

在自定义属性中引发消息异常

来自分类Dev

在http异常中返回自定义消息

来自分类Dev

C++ 自定义异常消息不显示

来自分类Dev

DRF自定义权限

来自分类Dev

定义自定义错误消息Flask Restful API

来自分类Dev

定义自定义错误消息Flask Restful API

来自分类Dev

自定义组件显示来自Facebook API的计数

来自分类Dev

来自 web api 的自定义 Json 响应

来自分类Dev

无法显示来自Wordpress REST API自定义端点的自定义字段

来自分类Dev

在DRF ModelViewSet上的“创建用户”上的自定义错误消息

来自分类Dev

如何为Kotlin中的扩展功能抛出的异常提供自定义异常消息?

来自分类Dev

如何在PowerShell中将此异常错误消息转换为我的自定义消息?

来自分类Dev

从Web Api反序列化自定义异常

来自分类Dev

Azure移动应用程序自定义API异常

Related 相关文章

热门标签

归档