8

私はFlask-RestlessをEmber.jsで使用しようとしていますが、うまくいきません。私をつまずかせているのはGET応答です。たとえば、たとえば Ember.jsでGETリクエストを行うと、次のことが期待されます。/api/people

{ 
    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 の要求に合わせて変更するにはどうすればよいですか? ポストプロセッサ関数にあるかもしれないと感じていますが、実装方法がわかりません。

4

2 に答える 2

10

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

私はそれをテストしていませんが、動作するはずです。

于 2013-03-15T21:46:09.523 に答える
4

受け入れられた答えはその時点で正しかった。ただし、Flask-Restless でのポスト プロセッサとプリプロセッサの動作は変更されています。ドキュメントによると

要求のタイプごとにプリプロセッサーとポストプロセッサーは異なる引数を受け入れますが、いずれも戻り値を持ちません (具体的には、戻り値は無視されます)。プリプロセッサとポストプロセッサは、その引数をその場で変更します。

そのため、ポストプロセッサで、不要なキーを削除するだけです。例えば:

def api_post_get_many(result=None, **kw):
    for key in result.keys():
        if key != 'objects':
            del result[key]
于 2013-12-03T21:21:02.710 に答える