我是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:list indices必须是整数,而不是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
标题以反映更改的响应大小.