django-piston:覆盖发射器中的默认序列化

0 投票
2 回答
861 浏览
提问于 2025-04-16 05:43

我现在正在为一个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序列化器,但文档还不是很好,功能也还有一些缺失(这同样还在进行中)。

撰写回答