gpt4 book ai didi

json - 如何在 webapp2 中对 HTTP 错误响应进行 JSON 格式化

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

我正在使用 webapp2 在 App Engine 中进行开发。我想做的是在出现错误时发送自定义 JSON 格式的响应。例如当请求长度大于阈值时,以 HTTP 400 和响应正文响应

{'error':'InvalidMessageLength'}

在 webapp2 中,可以选择为某些异常分配错误处理程序。例如:

app.error_handlers[400] = handle_error_400

其中 handle_error_400 如下:

def handle_error_400(request, response, exception):
response.write(exception)
response.set_status(400)

webapp2.RequestHandler.abort(400)执行时,执行上面的代码。

如何根据上述设置动态地拥有不同的响应格式(HTML 和 JSON)?也就是说,如何调用不同版本的 handle_error_400 函数?

最佳答案

这是一个完整的示例,演示了如何为所有类型的错误使用相同的错误处理程序,如果您的 URL 以 /json 开头,则响应将是 application/json (发挥你的想象力,想一想如何充分利用 request 对象来决定你应该提供什么样的响应):

import webapp2
import json

def handle_error(request, response, exception):
if request.path.startswith('/json'):
response.headers.add_header('Content-Type', 'application/json')
result = {
'status': 'error',
'status_code': exception.code,
'error_message': exception.explanation,
}
response.write(json.dumps(result))
else:
response.write(exception)
response.set_status(exception.code)

app = webapp2.WSGIApplication()
app.error_handlers[404] = handle_error
app.error_handlers[400] = handle_error

在上面的示例中,您可以通过访问以下将返回 404 的 URL 轻松测试不同的行为,这是最容易测试的错误:

http://localhost:8080/404
http://localhost:8080/json/404

关于json - 如何在 webapp2 中对 HTTP 错误响应进行 JSON 格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15648589/

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