我是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
jsonify()
但是,你应该使用此处的response.get_data()方法来检索响应主体,因为这将使你可以迭代的响应变得平坦。
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标题以反映更改后的响应大小。
response.set_data()
Content-Length