将HttpError转换为JSON

时间:2014-01-04 04:39:37

标签: django

在我的几个地方的Django应用程序中:

raise HttpError(
    message="Bla bla bla",
    status=400,
)

有没有办法拦截所有引发的HttpErrors并将它们包装在一个漂亮的JSON体中?类似的东西:

{
    "status": "error",
    "message":" "Bla bla bla"
}

2 个答案:

答案 0 :(得分:2)

自定义middleware是您应该完成工作的地方。

创建中间件类,定义process_exception()方法;如果HttpError返回json响应,否则返回None(不要重新引发异常):

  

当视图引发异常时,Django会调用process_exception()。   process_exception()应返回NoneHttpResponse   宾语。如果它返回HttpResponse对象,则返回模板响应   将应用响应中间件,以及由此产生的响应   返回浏览器。否则,默认的异常处理会踢   英寸

以下是一个例子:

class CustomMiddleware():
    def process_exception(self, request, exception):
        if not isinstance(exception, HttpError):
            return None

        response = json.dumps({'status': exception.status, 
                               'message': exception.message})
        return HttpResponse(response, 
                            content_type='application/json; charset=utf-8')

另外,不要忘记将中间件添加到MIDDLEWARE_CLASSES设置。

希望有所帮助。

答案 1 :(得分:0)

创建或查找将捕获异常的中间件,并检查URI或视图以查看它是否应转换异常或重新加载它。