我正在尝试使用Flask-Restless和Ember.js,但这并不是那么好。这是GET响应让我沮丧。例如,当我在GET
上发出/api/people
请求时,例如Ember.js期望:
{
people: [
{ id: 1, name: "Yehuda Katz" }
]
}
但Flask-Restless回应:
{
"total_pages": 1,
"objects": [
{ "id": 1, "name": "Yahuda Katz" }
],
"num_results": 1,
"page": 1
}
如何更改Flask-Restless的响应以符合Ember.js的要求?我有这种感觉它可能在后处理器函数中,但我不确定如何实现它。
答案 0 :(得分:9)
Flask扩展程序有pretty readable source code。您可以创建一个GET_MANY
后处理器:
def pagination_remover(results):
return {'people': results['objects']} if 'page' in results else results
manager.create_api(
...,
postprocessors={
'GET_MANY': [pagination_remover]
}
)
我没有对它进行过测试,但它应该有效。
答案 1 :(得分:4)
当时接受的答案是正确的。然而,Flask-Restless中的后期和预处理器工作已经改变。 According to the documentation:
每种请求的预处理器和后处理器都接受 不同的参数,但它们都没有返回值(更多 具体而言,忽略任何返回的值)。预处理器和 后处理器就地修改它们的参数。
所以现在在我的后处理器中我只删除了我不想要的任何键。例如:
def api_post_get_many(result=None, **kw):
for key in result.keys():
if key != 'objects':
del result[key]