【问题标题】:error serializer.data when I'm not accesing it当我不访问它时错误serializer.data
【发布时间】:2023-03-10 12:31:01
【问题描述】:

我有错误:

访问serializer.data后不能调用.save()。如果您需要在提交到数据库之前访问数据然后检查 '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
            )

verify_user 是我做的一个自定义函数。如果我不在该函数中使用 valid_data,则 save() 正在执行。如果不是,它会给出那个信息。在里面我不修改validated_data:

序列化器.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

【问题讨论】:

    标签: django python-3.x visual-studio-code


    【解决方案1】:

    问题在于调试模式,因为在调试模式下,即使您没有显式访问但调试器可以访问该对象。

    【讨论】:

    • 我为此大发雷霆。它是调试器。为什么 DRF 对访问序列化程序数据如此挑剔?太蠢了!
    猜你喜欢
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多