Tre*_*ent 5 django json exception-handling
有没有人对让中间件捕获异常的最佳方式有意见,而不是将错误呈现到 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4021 次 |
| 最近记录: |