• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

学而精

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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

posted on 2012-07-19 04:10  Songhan  阅读(677)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3