修改Flask-Restless的JSON响应

Dre*_*son 7 python flask ember.js flask-restless

我正在尝试使用Flask-Restless和Ember.js,这并不是那么好.这是GET响应让我沮丧.例如,当我发出GET请求时/api/people,例如Ember.js期望:

{ 
    people: [
        { id: 1, name: "Yehuda Katz" }
    ] 
}
Run Code Online (Sandbox Code Playgroud)

但Flask-Restless回应:

{
    "total_pages": 1, 
    "objects": [
        { "id": 1, "name": "Yahuda Katz" }
    ], 
    "num_results": 1, 
    "page": 1
}
Run Code Online (Sandbox Code Playgroud)

如何更改Flask-Restless的响应以符合Ember.js的要求?我有这种感觉它可能在后处理器函数中,但我不知道如何实现它.

Ble*_*der 9

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]
    }
)
Run Code Online (Sandbox Code Playgroud)

我没有测试它,但它应该工作.

  • @datasmid:这根本没用. (2认同)

Dre*_*son 4

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

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

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

def api_post_get_many(result=None, **kw):
    for key in result.keys():
        if key != 'objects':
            del result[key]
Run Code Online (Sandbox Code Playgroud)