gpt4 book ai didi

django - 捕获 Django 异常时返回 JSON 错误?

转载 作者:行者123 更新时间:2023-12-01 01:17:41 25 4
gpt4 key购买 nike

有没有人对让中间件捕获异常的最佳方式有意见,而不是将错误呈现到 HTML 模板中,而是返回 JSON 对象?目前我有下面的中间件来捕获异常,如果它可以找到额外的用户错误消息,则将其放入请求中(然后模板会接收)。

类 ExceptionUserErrorMessageMiddleware(object):
def process_exception(自我,请求,异常):
"""如果异常包含与用户相关的信息,则
将其粘贴到请求对象上"""

theFormat = djrequest.get_getvar(request, settings.FORMAT_PARAM, "")
msg = getMessage(异常)
如果消息:
setattr(请求,USER_ERROR_MESSAGE_ATTR,消息)

如果格式==“json”:
打印“做某事”

在这里返回 json 对象的最佳方式是什么?我应该设置任何额外的标题吗?

对于不通过中间件的特殊情况,有没有办法做同样的事情(我很确定 404 没有,还有其他的)?

最佳答案

我们在 MapIt 项目中做了什么 - https://github.com/mysociety/mapit - 这样做是向中间件引发异常,如您所说,然后根据请求提供的格式直接返回 HTML 模板或 JSON 对象。您可以在 https://github.com/mysociety/mapit/blob/master/mapit/middleware/view_error.py 查看代码

就附加头而言,我们的 output_json 函数将响应的 Content-Type 设置为 'application/json;字符集=utf-8'。

对于 404 情况,我们有自己的 get_object_or_404 函数,它封装了 get_object_or_404 并将 Django Http404 异常转换为我们自己的异常,然后如果适合请求,它将正确返回 JSON。

from django.shortcuts import get_object_or_404 as orig_get_object_or_404

def get_object_or_404(klass, format='json', *args, **kwargs):
try:
return orig_get_object_or_404(klass, *args, **kwargs)
except http.Http404, e:
raise ViewException(format, str(e), 404)

关于django - 捕获 Django 异常时返回 JSON 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11129079/

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