4

我正在开发基于 Django 的 Web 服务,我正在尝试找出进行序列化的最佳方法。

不过,棘手的要求是,我想对响应的格式和包含的字段进行几乎完全的控制。

例如,Django 序列化程序(不幸的是,它包括wadofstuff 序列化程序)自动将字段包装在 中{ model: "app.Model", pk: 42, fields: { ... }},这对于创建固定装置非常有用,但对我来说不是很好——我希望完全控制输出。

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

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

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

ª: 它的文档和测试很少,而且我在使用序列化程序时遇到了一些问题。

4

3 回答 3

1

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

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

于 2010-06-16T17:34:01.843 回答
1

当我需要一些非常快速的自定义序列化并且我的案例不需要反序列化时,我只需编写 django 模板,它可以从列表/查询集/对象中生成我想要的任何格式。然后,您可以使用适当的上下文调用 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,那么为什么不使用它呢?

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

于 2010-06-16T17:35:24.550 回答
1

编辑 :

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


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

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

当第一个版本出来时会有一个特色下载!

于 2010-06-22T11:28:36.037 回答