Python Django Rest Framework-仅用于反序列化的序列化程序字段
我正在编写一个使用Django Rest框架加密/解密密文的简单API,我想知道是否可以在序列化程序中定义仅用于反序列化(即仅用于验证)的恶魔。例如,我有一个名为Python Django Rest Framework-仅用于反序列化的序列化程序字段,python,json,django,serialization,Python,Json,Django,Serialization,我正在编写一个使用Django Rest框架加密/解密密文的简单API,我想知道是否可以在序列化程序中定义仅用于反序列化(即仅用于验证)的恶魔。例如,我有一个名为Message的模型类,我有一个视图,允许用户创建Message对象。当我调用serializer.is_valid()时,我想检查名为明文的字段是否为空/空,但当我向用户显示消息时,我想将明文字段变成超链接实体字段。换句话说,我希望用户能够发布这样的消息: { "plaintext": "blah", "key": "tun
Message
的模型类,我有一个视图,允许用户创建Message
对象。当我调用serializer.is_valid()
时,我想检查名为明文
的字段是否为空/空,但当我向用户显示消息
时,我想将明文
字段变成超链接实体字段
。换句话说,我希望用户能够发布这样的消息:
{
"plaintext": "blah",
"key": "tunafish"
}
然后,在验证之后,我会向用户显示如下内容:
{
"plaintext": "link/to/plaintext",
"ciphertext": "link/to/ciphertext",
"key": "tunafish"
}
仅使用一个序列化程序就可以做到这一点吗?Django Rest Framework序列化程序有两个函数,您可以重写它们以使传入和传出字段具有自定义(不同)行为:
to_internal_value
(来自dict)和to_representation
(来自Django模型实例)
在您的情况下,我将使该字段成为一个超链接的实体字段
,并在中执行您需要的任何工作,以创建实例与纯文本
实例之间的关系
请参阅有关创建自定义字段api的文档-
或者阅读此处的源代码-您是否知道如何在不使用硬编码的情况下验证字段长度?例如,如果其中一个字段的max_length=10,我如何从序列化程序(或由模型处理)中验证它@SimonZhu-您可以向序列化程序添加一个字段级别的validate_field_name
函数:(或者您可以引发序列化程序。ValidationError()
在您的内部设置为_内部值
功能)。您还可以向Django模型添加一个验证器,如本SO答案中所述。希望有帮助!