2013-12-09 60 views
0

我想結合Ember.js和Flask不安,但遇到接口JSON API的困難。預處理函數燒瓶不安

問題是我需要按摩JSON以匹配Ember期望的客戶端。

灰燼被髮送像這樣的POST

u'todo': {u'isCompleted': False, u'title': u'hello'}} 

但瓶不寧預計這樣的事情

{'is_completed': False, 'title': u'hello'} 

我能夠做到這一點的可以看到下面,但是由於瓶不安定的預處理程序不接受返回參數,並且數據對象必須在適當的位置進行更改,並創建一個包含我所需的新字典的操作。所以我需要通過添加和刪除我需要的鍵來笨拙地改變給定的數據字典。

有沒有人有更好的解決方案,容易擴展到更復雜的模型?

def ember_formatter(result): 
    for key in result.keys(): 
     if key != 'objects': 
      del result[key] 

    result['todos'] = result['objects'] 
    del result['objects'] 

def pre_ember_formatter(data=None, **kw): 

    data['is_completed'] = data['todo']['isCompleted'] 
    data['title'] = data['todo']['title'] 
    del data['todo'] 

restless_manager.create_api(
    Todo, 
    methods=['GET', 'POST', 'DELETE', 'PUT', 'PATCH'], 
    url_prefix='/api', 
    collection_name='todos', 
    results_per_page=-1, 
    postprocessors={ 
     'GET_MANY': [ember_formatter] 
    }, 
    preprocessors={ 
     'POST': [pre_ember_formatter], 
    } 
) 

回答

0

我不是100%確定如何關閉躁動API映射到Django的REST的框架,但在你的例子中,DRF適配器上面會開箱的。

https://github.com/toranb/ember-data-django-rest-adapter

通過這種方法,你可以留下你的JSON API的是,只是插入一個新的客戶端適配器

0

我給這Toran引起他的方法最終導致了對啓蒙的路徑,但想明確說明我是如何做到這一點的。

我發現在Ember的客戶端進行所有這些更改實際上比較容易。總的想法是,您需要更改從服務器進入的JSON,並更改離開客戶端的JSON。

這一切都在DS.RESTSerializer類中完成,如果你看,有如何做到這一點的例子,一旦你習慣了它,Ember的文檔是真棒。

因此,要修改從服務器進來的JSON,您需要修改extractArray和extractSingle函數。

要修改離開客戶端的JSON,您希望修改serialize和serializeIntoHash函數,它非常簡單。

我認爲在Ember中這樣做是有道理的,因爲您通常無法控制與您交談的API。