如何在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

回到顶部