Django序列化器:is_valid实际上做了什么?

时间:2018-04-14 04:27:10

标签: django django-rest-framework serializer

git repodjango 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():"实际上做了什么?是检查消息中的数据是否与用户配置文件中的数据匹配?我之前从未使用过序列化程序,可以使用它的解释。

由于

1 个答案:

答案 0 :(得分:1)

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