2013-03-15 13 views
5

Próbuję użyć Flask-Restless z Ember.js, który nie idzie tak świetnie. To reakcje GET, które mnie potykają. Na przykład, kiedy robię żądanie GET na /api/people np ember.js oczekuje:Modyfikuj odpowiedź JSON Flask-Restless

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

Ale Kolba-Restless odpowiada:

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

Jak zmienić odpowiedź skrzynkowego niespokojny, by odpowiadać co chciałby Ember.js? Mam wrażenie, że może to być funkcja postprocesora, ale nie jestem pewien, jak ją wdrożyć.

+1

Sigh ... Próbowałem zadać pytanie odwrotne i ktoś powiedział, że powinienem zmienić odpowiedź Flask-Restless. TBH W Pythonie czuję się znacznie lepiej, więc robienie tego w ten sposób przemawia do mnie. –

Odpowiedz

3

Przyjęta odpowiedź była prawidłowa w tym czasie. Jednak post i preprocesory działające w trybie Flask-Restless uległy zmianie. According to the documentation:

W Preprocesory i postprocesory dla każdego typu żądania akceptować różne argumenty, ale żaden z nich nie ma wartości zwracanej (więcej konkretnie, każdy zwracana wartość jest ignorowana). Preprocesory i postprocesory modyfikują swoje argumenty w miejscu.

Teraz w moim postprocesorze po prostu usuwam wszystkie klucze, których nie chcę. Na przykład:

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

Rozszerzenia kolb mają numer pretty readable source code. Można dokonać GET_MANY postprocesor:

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

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

ja jej nie testowane, ale powinno działać.

+1

Jestem naprawdę zakłopotany, to było takie proste, ale dziękuję bardzo. –

+0

Przetestowałem to i tak się nie stało. – bbaassssiiee

+2

@datasmid: To wcale nie jest pomocne. – Blender