我(尝试)通过Flask创建一个RESTlike API,并希望在返回的json响应中包含HTTP响应代码。我发现flask.jsonify()
非常有助于生成我的回复,我可以通过app.after_request
装饰器操纵回复。
我遇到的问题是响应数据已经在我使用app.after_request
装饰的函数中读取时已经序列化,因此插入response.status_code
需要反序列化并重新序列化每个请求。
我很擅长烧瓶,并且不确定将status_code放入响应的“正确”方法,最好是在它被序列化为完整的响应之前。
答案 0 :(得分:1)
我自己从不需要做这样的事情,但你可以通过继承Response
类来做到这一点。
假设您创建一个JSONResponse
类作为Response
的子类。该类的构造函数采用与父类相同的参数,但它不是字体的字符串,而是采用字典。
因此,此时不要调用jsonify()
,只需将带有数据的字典传递到JSONResponse
对象。响应对象获取字典并将其存储在成员变量中,然后调用父响应类并立即设置一个空响应体。
我认为这会让Flask误以为答案是有效的。
当你到达after_request
处理程序时,你可以访问响应对象,这样你就可以获得字典,仍然是它的原生形式,并进行你想要的任何修改。
JSONResponse
类有一个名为render()
的方法,您在完成修改字典时会调用该方法。此方法在最终版本的数据上调用jsonify()
并更新父类中的响应主体。