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添加进去。