gpt4 book ai didi

python - Django 休息框架 : How to initialise & use custom exception handler?

转载 作者:太空宇宙 更新时间:2023-11-03 10:58:27 25 4
gpt4 key购买 nike

DRF 新手在这里。

我正在尝试通过自定义异常处理程序处理项目中的所有异常。基本上,我想做的是,如果任何序列化程序无法验证数据,我想将相应的错误消息发送到我的自定义异常处理程序并相应地重新格式化错误。

我已将以下内容添加到 settings.py。

# DECLARATIONS FOR REST FRAMEWORK
REST_FRAMEWORK = {
'PAGE_SIZE': 20,
'EXCEPTION_HANDLER': 'main.exceptions.base_exception_handler',

'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication'
)
}

但是一旦我向项目中的任何端点发送无效参数,我仍然会收到 DRF 验证器的默认错误消息。 (例如 {u'email': [u'This field is required.']})

在相应的序列化程序的验证函数上引发的错误,永远不会到达我的异常处理程序。

这是 Project Tree 的图片我正在研究。

我错过了什么吗?

提前谢谢你。

最佳答案

为此,您的 base_exception_handler 应该检查 ValidationError正在引发异常,然后修改并返回自定义错误响应。

(注意:如果数据参数无效,序列化程序会引发 ValidationError 异常,然后返回 400 状态。)

base_exception_handler 中,我们将检查引发的异常是否属于 ValidationError 类型,然后修改错误格式并返回修改后的错误响应。

from rest_framework.views import exception_handler
from rest_framework.exceptions import ValidationError

def base_exception_handler(exc, context):
# Call DRF's default exception handler first,
# to get the standard error response.
response = exception_handler(exc, context)

# check that a ValidationError exception is raised
if isinstance(exc, ValidationError):
# here prepare the 'custom_error_response' and
# set the custom response data on response object
response.data = custom_error_response

return response

关于python - Django 休息框架 : How to initialise & use custom exception handler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37188319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com