我不访问它时出现错误serializer.data

Shi*_*ado 2 django python-3.x visual-studio-code

我有错误:

.save()访问后无法调用serializer.data。如果需要在提交数据库之前访问数据,请改为检查“ serializer.validated_data”。

即使我不访问serialized.data但访问了serialized.validate_data。

这是我的代码:

views.py

class Login(APIView):
    """
    Verify the login given is correct. #FIXME
    """
    def post(self, request, format=None):
        """Process the user given

        """

        serializer = LoginSerializer(data=request.data)

        if not serializer.is_valid():
            return Response(
                serializer.errors,
                status=status.HTTP_400_BAD_REQUEST
            )

        if serializer.verify_user(serializer.validated_data):
            serializer.save()
            return Response(
                serializer.data,
                status=status.HTTP_201_CREATED
            )
Run Code Online (Sandbox Code Playgroud)

verify_user是我执行的自定义函数。如果我不在该函数中使用validated_data,则save()正在执行。如果不是,它将给出该消息。在内部,我不修改validated_data:

serializers.py

class LoginSerializer(serializers.Serializer):
    """Interface fields for login api
    """

    username = serializers.CharField(max_length=50)
    password = serializers.CharField(max_length=255)
    origin = serializers.CharField(max_length=255, required=False)

    def verify_user(self, validated_data):
        """
        Try to authenticate a user with given credentials
        :return: True on success
        """

        password_valid = validated_data['password']
        username_valid = validated_data['username']
        # TODO: Put in utilities
        _password_crp = self.cryp_password(password_valid)

        # 1 verify new table
        user = User.objects.filter(
            username=username_valid,
            password=_password_crp
        )
        if user is None or user.count() == 0:
            return False
        return True
Run Code Online (Sandbox Code Playgroud)

Shi*_*ado 6

问题出在调试模式下,因为在调试模式下,即使您不显式访问但调试器也可以访问对象。