【问题标题】:Modify JSON response of Flask-Restless修改 Flask-Restless 的 JSON 响应
【发布时间】:2013-03-04 17:38:55
【问题描述】:

我正在尝试将 Flask-Restless 与 Ember.js 一起使用,但效果并不好。让我绊倒的是 GET 响应。例如,当我在 /api/people 上执行 GET 请求时,例如 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 的要求?我有这种感觉,它可能在后处理器功能中,但我不确定如何实现它。

【问题讨论】:

  • 叹息...我试着问反问题,有人刚刚说我应该改变 Flask-Restless 的响应方式。 TBH 我在 Python 中更自如,所以这样做确实很吸引我。

标签: python ember.js flask flask-restless


【解决方案1】:

当时接受的答案是正确的。然而,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]

【讨论】:

    【解决方案2】:

    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]
        }
    )
    

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

    【讨论】:

    • 我真的很尴尬,这么简单,但非常感谢。
    • 我对此进行了测试,但没有。
    • @datasmid:这根本没有帮助。
    猜你喜欢
    • 2017-11-14
    • 1970-01-01
    • 2015-03-11
    • 2018-03-15
    • 2016-04-10
    • 2013-10-16
    • 2020-01-19
    • 2014-09-16
    • 1970-01-01
    相关资源
    最近更新 更多