8

我正在尝试将 Flask-Restless 与 Ember.js 一起使用,但效果并不好。让我绊倒的是 GET 响应。例如,当我对 Ember.js进行GET请求时,期望:/api/people

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

4

2 回答 2

10

Flask 扩展具有非常易读的源代码。您可以制作GET_MANY后处理器:

def pagination_remover(results):
    return {'people': results['objects']} if 'page' in results else results

manager.create_api(
    ...,
    postprocessors={
        'GET_MANY': [pagination_remover]
    }
)

我还没有测试过,但它应该可以工作。

于 2013-03-15T21:46:09.523 回答
4

当时接受的答案是正确的。然而,Flask-Restless 中的后置和预处理器工作已经改变。根据文档

每种请求的预处理器和后处理器都接受不同的参数,但它们都没有返回值(更具体地说,任何返回值都被忽略)。预处理器和后处理器就地修改它们的参数。

所以现在在我的后处理器中,我只是删除了任何我不想要的键。例如:

def api_post_get_many(result=None, **kw):
    for key in result.keys():
        if key != 'objects':
            del result[key]
于 2013-12-03T21:21:02.710 回答