通过Flask after_request修改JSON响应

时间:2013-12-04 01:52:24

标签: python json http flask

我(尝试)通过Flask创建一个RESTlike API,并希望在返回的json响应中包含HTTP响应代码。我发现flask.jsonify()非常有助于生成我的回复,我可以通过app.after_request装饰器操纵回复。

我遇到的问题是响应数据已经在我使用app.after_request装饰的函数中读取时已经序列化,因此插入response.status_code需要反序列化并重新序列化每个请求。

我很擅长烧瓶,并且不确定将status_code放入响应的“正确”方法,最好是在它被序列化为完整的响应之前。

1 个答案:

答案 0 :(得分:1)

我自己从不需要做这样的事情,但你可以通过继承Response类来做到这一点。

假设您创建一个JSONResponse类作为Response的子类。该类的构造函数采用与父类相同的参数,但它不是字体的字符串,而是采用字典。

因此,此时不要调用jsonify(),只需将带有数据的字典传递到JSONResponse对象。响应对象获取字典并将其存储在成员变量中,然后调用父响应类并立即设置一个空响应体。

我认为这会让Flask误以为答案是有效的。

当你到达after_request处理程序时,你可以访问响应对象,这样你就可以获得字典,仍然是它的原生形式,并进行你想要的任何修改。

JSONResponse类有一个名为render()的方法,您在完成修改字典时会调用该方法。此方法在最终版本的数据上调用jsonify()并更新父类中的响应主体。