【问题标题】:Django serializers: What does is_valid actually do?Django 序列化程序:is_valid 实际上是做什么的?
【发布时间】:2018-04-14 04:27:09
【问题描述】:

git repo: django tutorial

我一直在关注上述 django 项目,该项目着眼于创建人与人之间的聊天。我遇到过这部分:

def message_list(request, sender=None, receiver=None):
    ...

    elif request.method == 'POST':
        print('posting')
        data = JSONParser().parse(request)
        print(data)
        serializer = MessageSerializer(data=data)
        print(serializer)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data, status=201)

class MessageSerializer(serializers.ModelSerializer):
    sender = serializers.SlugRelatedField(many=False, slug_field='email', queryset=User.objects.all())
    receiver = serializers.SlugRelatedField(many=False, slug_field='email', queryset=User.objects.all())

    class Meta:
        model = Message
        fields = ['sender', 'receiver', 'message', 'timestamp']

"if serializer.is_valid():" 实际上是做什么的?是否检查消息中的数据是否与用户配置文件中的数据匹配?我以前从未使用过序列化程序,可以使用它的解释。

谢谢

【问题讨论】:

  • 它使用序列化程序MessageSerializer中指定的各个字段的条件验证您的序列化程序。

标签: django django-rest-framework serialization


【解决方案1】:

在将数据写入数据库之前,您需要在反序列化过程中调用is_validis_valid 对输入数据执行validation 并确认此数据包含所有必填字段并且所有字段都具有正确的类型。如果验证过程成功is_valid 设置validated_data 字典,用于在数据库中创建或更新数据。否则序列化程序的属性errors 将包含有关输入数据错误的信息,您可以在视图中将此信息作为 HTTP 响应发送。

【讨论】:

  • 我相信is_valid() 返回TrueFalse 如果为真则设置validated_dataerrors 如果False.. 它返回return not bool(self._errors)
  • 我在上面添加了序列化器。它检查哪些字段?发送者和接收者还是全部 4 个?
  • @MicahPearce 它将检查所有 4 个字段。
  • 如果is_valid()成功了,我们能保证save()不会出错退出吗??
猜你喜欢
  • 1970-01-01
  • 2011-03-11
  • 2010-11-26
  • 2015-06-23
  • 2017-12-26
  • 2016-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多