Django API : 用tastypie实现不同格式的Serializer

例如建一个输出csv格式的Serializer。

1. 建立一个类,继承Serializer类

  代码:

View Code
class CSVSerializer(Serializer):
    formats = ['json', 'jsonp', 'xml', 'yaml', 'html', 'csv']
    content_types = {
        'json': 'application/json',
        'jsonp': 'text/javascript',
        'xml': 'application/xml',
        'yaml': 'text/yaml',
        'html': 'text/html',
        'csv': 'text/csv',
    }

2. 方法输出csv

  def to_csv(self, data, options=None):
        options = options or {}
        data = self.to_simple(data, options)

  这里的data输出的是字典dict格式,我用时为{"object":{[...]},"Meta":{}}

3. 由于字典是一环嵌一环,我用递归将其拓展开来。

  遍历字典,得到的每个item都是原组:

    for item in data.iteritems()

  判断item[1]是否为字典,如果是的话继续对该值遍历,用递归:

    if type(arg[1]) is types.DictType:self.方法名

  对于出现List的情况,先判断,再对每个元素判断遍历:

    elif type(arg[1]) is types.ListType:

      for listarg in arg[1]:

  为了使名字不混淆,还得更改名字:

    在每个if/elif后面name+=str(arg[0])+"." 

  递归最终的方法是将arg[0]+name写入名字的list,arg[1]写入值的list

  记住两个list和name都是该方法的参数

4. 最后按照csv的方法将两个list添加进去。

 

 http://tidepal.appspot.com/?p=106001

你可能感兴趣的:(Serialize)