修改Flask-Restless的JSON响应

时间:2013-03-15 21:00:50

标签: python ember.js flask flask-restless

我正在尝试使用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的要求?我有这种感觉它可能在后处理器函数中,但我不确定如何实现它。

2 个答案:

答案 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]