Py学习  »  Django

Django快速序列化数据

rapospectre • 10 年前 • 11374 次点击  

推荐一个自己写的快速序列化Django QuerySet或者 Django model object的包:

django-simple-serializer

为什么要做django simple serializer?

在django中,目前主要的序列化方法主要有以下三种:

django.core.serializers:

这是django内建的序列器,它可以很好的序列化QuerySet,但当他遇到单独的django model object时就会报错,并且它序列化出的model中如果包含DateTimeField时,输出数据中的时间是个datetime对象,无法直接当作序列化数据使用。

QuerySet.values()

和上面一样,它生成的list/dict时的model中如果包含DateTimeField时,输出数据中的时间是个datetime对象,无法直接当作序列化数据使用。

django-rest-framework serializers

django-rest-framework 是一个帮助用户快速构建REST API的强大工具。同时,他的序列器也非常强大,但是想用他的序列器你不得不为相应的model指定相应的model serializer。在某些时候我们只是想单纯的快速取得序列数据,而django-simple-serializer正好解决了这个问题。

django simple serializer

快速取得序列化数据,拥有多种输出格式,字符串化时间,没有任何额外配置与操作。


安装:

pip install django-simple-serializer

使用:

假设我们现在拥有如下几个models:

class Classification(models.Model):
    c_name = models.CharField(max_length=30, unique=True)

class Article(models.Model):
    caption = models.CharField(max_length=50)
    classification = models.ForeignKey(Classification, related_name='cls_art')
    content = models.TextField()
    publish = models.BooleanField(default=False)

一个简单的例子:

from dss.Serializer import serializer
article_list = Article.objects.all()
data = serializer(article_list)

data:

[{'read_count': 0, 'create_time': 1432392456.0, 'modify_time': 1432392456.0, 'sub_caption': u'first', 'comment_count': 0, u'id': 31}, {'read_count': 0, 'create_time': 1432392499.0, 'modify_time': 1432392499.0, 'sub_caption': u'second', 'comment_count': 0, u'id': 32}]

详细使用及API:

django-simple-serializer

BUG:

在序列化QuerySet、Page、list输出成xml时会报muti root 错误,我正在找一个更好的解决办法修复。也欢迎大家提意见~

PS:求问一个关于测试的问题,怎么模拟产生Django QuerySet数据?望高手解答,小弟感激不尽

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/1115