如何在after_request函数中更改flask中的响应?
我是Flask和python的新手。我有一堆视图以jsonify()格式返回字典。对于这些视图,我想添加一个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”。请求完成后,如何更改响应字典并添加密钥?
回答:
response
是WSGI对象,这意味着响应的主体必须是可迭代的。对于jsonify()
响应来说,这只是一个列表,其中只有一个字符串。
但是,你应该使用此处的response.get_data()
方法来检索响应主体,因为这将使你可以迭代的响应变得平坦。
以下应该工作:
d = json.loads(response.get_data())d['altered'] = 'this has been altered...GOOD!'
response.set_data(json.dumps(d))
不要jsonify()
在这里再次使用;返回一个完整的新响应对象;你想要的只是这里的JSON响应主体。
请使用,response.set_data()
因为这也会调整Content-Length
标题以反映更改后的响应大小。
以上是 如何在after_request函数中更改flask中的响应? 的全部内容, 来源链接: utcz.com/qa/430666.html