Django:自定义序列化选项?

时间:2010-06-16 17:25:43

标签: python django serialization django-piston

我正在开发一个基于Django的Web服务,我正在试图弄清楚序列化的最佳方法是什么。

但棘手的要求是,我希望能够完全控制响应中的格式和字段。

例如,Django序列化程序(不幸的是,它包括wadofstuff serializer)会自动包裹{ model: "app.Model", pk: 42, fields: { ... }}中的字段,这对于创建灯具非常有用,但对我来说不是很好 - 我d喜欢完全控制输出。

此外,我想要一个知道Django对象的序列化程序,例如,它会使用QuerySetManyToManyField做正确的事。

目前我正在考虑使用django-piston的emitters.py,但我对django-piston的经验只是平庸的,所以我想看看是否有其他选择。

那么,可定制的Django序列化器还有其他选择吗?

ª:它的记录和测试都很少,我在序列化器方面遇到了一些问题。

3 个答案:

答案 0 :(得分:1)

你看过django-piston吗?它应该有一堆东西来使这更容易。

(不确定序列化,但Django RESTy Web服务。)

答案 1 :(得分:1)

当我需要一些自定义序列化非常快且我的情况不需要反序列化时,我只需编写django模板,它可以从list / queryset / object生成我想要的任何格式。然后,您可以使用适当的上下文调用render_to_string并将数据序列化。

更新:一些简短的例子

假设您希望datatables.net plugin接受json格式。由于有一些特殊的参数需要使用simplejson序列化查询集,否则这里是不可能的(或者至少可能不那么容易)。我们发现提供这种结构的最快方法是创建像这样的简单模板:

{
    "sEcho": {{sEcho}},
    "iTotalRecords": {{iTotalRecords}},
    "iTotalDisplayRecords": {{iTotalDisplayRecords}},
    "aaData":[
    {% for obj in querySet %}
    [
        "{{obj.name}}",
        "{{obj.message|truncatewords:20}}",
        "<a href=\"{% url some_view obj.id %}\">{{obj.name}}</a>"
    ]
    {% if not forloop.last %}
    ,
    {% endif %}
    {% endfor %}
    ]
}

这让我们正在寻找美丽的json。它还使您可以完全控制格式。其他优点是通过使用内置的django过滤器来修改对象字段的能力,在我们的例子中它非常有用。

我知道这不是书中描述的序列化,但如果你想将某个对象转换为自定义格式,这个解决方案可能是最快的。由于某些原因,django开发人员允许将模板渲染为任何给定的格式而不仅仅是html,为什么不使用它?

上面显示的示例非常具体,但您可以生成任何其他格式。当然,为此编写反序列化器可以从这种格式恢复对象可能会很痛苦但是如果你不需要它...

答案 2 :(得分:1)

编辑:

现在在https://bitbucket.org/sebpiq/any2any/


我目前正在为Django编写一个功能齐全的序列化框架。目的正是为了完全控制序列化。它可能很好地填补你的要求!但是,还没有准备好。我估计在1或2周内我将能够发布第一个版本。

您仍然可以查看Google代码:http://code.google.com/p/django-serializable/,如果您对此感兴趣,甚至可以提供一些帮助。

第一个版本发布时会有特色下载!