在我的几个地方的Django应用程序中:
raise HttpError(
message="Bla bla bla",
status=400,
)
有没有办法拦截所有引发的HttpErrors并将它们包装在一个漂亮的JSON体中?类似的东西:
{
"status": "error",
"message":" "Bla bla bla"
}
答案 0 :(得分:2)
自定义middleware是您应该完成工作的地方。
创建中间件类,定义process_exception()方法;如果HttpError
返回json响应,否则返回None
(不要重新引发异常):
当视图引发异常时,Django会调用
process_exception()
。process_exception()
应返回None
或HttpResponse
宾语。如果它返回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或视图以查看它是否应转换异常或重新加载它。