2013-03-15 77 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