[英]Django Rest Framework - serializer fields for only deserialization
我正在编写一个使用Django Rest Framework加密/解密密文的简单API,我想知道是否有可能在序列化器中定义仅用于反序列化(即仅用于验证)的恶魔。 例如,我有一个名为Message
的模型类,并且有一个允许用户创建Message
对象的视图。 当我调用serializer.is_valid()
,我想检查一个称为plaintext
的字段是否不是空/空,但是当我向用户显示Message
时,我希望将plaintext
字段设置为HyperlinkedIdentityField
而不是直接显示它。 换句话说,我希望用户能够发布这样的消息:
{
"plaintext": "blah",
"key": "tunafish"
}
然后,在对其进行验证之后,我将向用户显示类似以下内容的内容:
{
"plaintext": "link/to/plaintext",
"ciphertext": "link/to/ciphertext",
"key": "tunafish"
}
是否可以仅使用一个串行器来执行此操作?
Django Rest Framework序列化器具有两个函数,您可以重写它们以对传入和传出字段具有自定义(不同)行为: to_internal_value
(来自dict)和to_representation
(来自django模型实例)。
在您的情况下,我会将字段设置为HyperlinkedIdentityField
,并在to_internal_value
执行您需要做的所有工作以创建您的实例和plaintext
实例之间的关系。
有关创建自定义字段api的信息,请参见此文档-http: //www.django-rest-framework.org/topics/3.0-announcement/#changes-to-the-custom-field-api
或在这里阅读源代码-https: //github.com/tomchristie/django-rest-framework/blob/master/rest_framework/serializers.py
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.