- Django框架默认集成的是SimpleJson这个Python库,这个库在日常的Json序列化与反序列化已经完全足够,但是一旦涉及到复杂的对象(例如ORM框架上的持久化类)就会有点捉襟见肘。
- 下面总结问题和解决方案:(统一使用Django的单元测试来进行测试)
- 1.对象的序列化和反序列化。
- 首先,SimpleJson完全不支持对象的序列化与反序列化,如果要实现对象的序列化和反序列化,则需要在simplejson的dumps和loads两个方法中去添加参数,分别指明自定义的序列化和反序列化规则(这里的规则泛指方法或者一个类)。只有指定了规则,simplejson才能够知道如何将一个对象序列化为一个字典(dict),反之亦然。因此,解决方法可以使用Django内置的序列化和反序列化工具。这样一来,就可以序列化ORM所查询到的QuerySet对象集合了。
- 2.使用Django内置的序列化工具只能够序列化对象集合,想在序列化过程中添加一些额外的需要序列化的信息。
- 例如,在网络传输时,不但要传输对象集合,还需要传输一些额外的信息,例如标识结果的字符串result=”success”,这样一来就不能仅仅使用Django内置的序列化工具,而只能使用Python所有的SimpleJson库,而悖论的地方在于SimpleJson不支持序列化对象集合,因此,就需要对SimpleJson的方法进行一些加工。这里就是使用simplejson.dumps()方法所有的cls这个参数来指定自定义自己的序列化处理类。
- 3.序列化或反序列化单个对象
- Django的序列化工具只支持对象集合,因此需要做一些取巧的手段来完成序列化或者反序列化单个对象。
- 下面贴出解决方案的代码,详细的注释在代码中:
- 1from django.utilsimport simplejson
- 2from django.dbimport models
- 3from django.core.serializersimport serialize,deserialize
- 4from django.db.models.queryimport QuerySet
- 5from django.testimport TestCase
- 6
- 7class