2013-12-09 65 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。