2013-03-15 76 views
5

我尝试使用Flask-Restless和Ember.js,这不是很好。这是让我反感的GET回应。例如,当我为例子做一个/api/people要求GET预计Ember.js:修改Flask-Restless的JSON响应

{ 
    people: [ 
     { id: 1, name: "Yehuda Katz" } 
    ] 
} 

但是烧瓶不安与回应:

{ 
    "total_pages": 1, 
    "objects": [ 
     { "id": 1, "name": "Yahuda Katz" } 
    ], 
    "num_results": 1, 
    "page": 1 
} 

如何更改烧瓶不宁的反应,以符合Ember.js想要什么?我有这种感觉,它可能在后处理函数中,但我不知道如何实现它。

+1

叹息......我试着问反向问题,有人只是说我应该改变Flask-Restless的反应。 TBH我在Python中更加舒适,所以这样做对我很有吸引力。 – 2013-03-15 21:37:27

回答

3

当时接受的答案是正确的。然而,Flask-Restless中的post和preprocessors工作已经改变。 According to the documentation

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

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

def api_post_get_many(result=None, **kw): 
    for key in result.keys(): 
     if key != 'objects': 
      del result[key] 
8

烧瓶扩展有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

我真的很尴尬,这很简单,但非常感谢。 – 2013-03-15 21:54:25

+0

我测试了这个,但没有。 – bbaassssiiee 2013-06-18 13:17:45

+2

@datasmid:这根本没有帮助。 – Blender 2013-06-18 15:45:16