簡體   English   中英

修改Flask-Restless的JSON響應

[英]Modify JSON response of Flask-Restless

我正在嘗試使用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擴展具有非常易讀的源代碼 您可以創建一個GET_MANY后處理器:

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

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

我沒有測試它,但它應該工作。

接受的答案在當時是正確的。 然而,Flask-Restless中的后期和預處理器工作已經改變。 根據文件

每種類型的請求的預處理器和后處理器接受不同的參數,但它們都沒有返回值(更具體地說,忽略任何返回的值)。 預處理器和后處理器就地修改它們的參數。

所以現在在我的后處理器中我只刪除任何我不想要的鍵。 例如:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM