django-piston:覆盖发射器中的默认序列化
我现在正在为一个django项目写一个API,使用的是django-piston这个工具。不过,我需要自定义一些基本类型的序列化方式。
具体来说,我的模型是从一个特殊的Model
类继承而来的,这个类又是从django.db.models.base.ModelBase
继承的,但它不能像普通的django模型那样被序列化……所以,我想为这个特殊Model
类的所有子类重写序列化器。
我对piston不太了解……我看过代码,发现基本类型的映射type->serializer
似乎是写死的。
有没有人知道有没有标准的方法可以重写它???
2 个回答
1
你可以自己来处理数据的序列化。处理程序只需要接收和返回一个Python字典。不过,这样的话,你不能直接把它放进模型里。你需要为你的基本类型创建一个自己的资源处理器,这个处理器能够从字典中构建你的模型。
class ModelHandler(HandlerBase):
allowed_methods = ('Get',)
def read(self, request, id=None):
if id is not None:
m = Model.objects.get(id=id)
ret = {}
ret['field'] = m.field
return ret
1
好吧……我一直没能让它正常工作,所以我找了一些自己之前写的代码,把它整理得更清晰,最后做出了一个完整的Python序列化框架,叫做SpitEat。我开始写一些文档,但这还在进行中。
我放弃了使用piston,因为这已经不是第一次让我失望了,它在(反)序列化操作上缺乏灵活性。
SpitEat的目标是完全可定制的,它从一个更抽象的角度来看待序列化,而不仅仅是“django对象”,并且提供了经过测试的Django序列化器,但文档还不是很好,功能也还有一些缺失(这同样还在进行中)。