gpt4 book ai didi

python - 如何在 after_request 函数中更改 flask 中的响应?

转载 作者:太空狗 更新时间:2023-10-29 19:34:10 24 4
gpt4 key购买 nike

我是 Flask 和 python 的新手。我有一堆 View 以 jsonify() 格式返回字典。对于这些 View 中的每一个,我想添加一个 after_request 处理程序来更改响应,以便我可以向该字典添加一个键。我有:

@app.route('/view1/')
def view1():
..
return jsonify({'message':'You got served!'})

@app.after_request
def after(response):
d = json.loads(response.response)
d['altered'] = 'this has been altered...GOOD!'
response.response = jsonify(d)
return response

我得到的错误是“TypeError:列表索引必须是整数,而不是 str”。如何在请求完成后更改响应字典并添加 key ?

最佳答案

response 是一个 WSGI 对象,这意味着响应的主体必须是可迭代的。对于 jsonify() 响应,它只是一个列表,其中只有一个字符串。

但是,您应该使用 response.data property在这里检索响应主体,因为这将为您扁平化可迭代的响应。

从 Flask 1.0 开始,您甚至不必从 JSON 中解码数据,您可以使用新的 Response.get_json() method相反。

以下应该有效:

d = response.get_json()
d['altered'] = 'this has been altered...GOOD!'
response.data = json.dumps(d)

不要在这里再次使用jsonify();返回一个全新的响应对象;您需要的只是此处的 JSON 响应正文。

您可以改为分配回 response.data,它将负责编码回字节并调整 Content-Length header 以反射(reflect)更改后的响应大小。

关于python - 如何在 after_request 函数中更改 flask 中的响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22274137/

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