Django Rest框架验证方法不工作

Django Rest框架验证方法不工作,django,django-rest-framework,django-serializer,django-rest-viewsets,Django,Django Rest Framework,Django Serializer,Django Rest Viewsets,这是我在Rest框架中完成的第一项任务。我参考了一个视频教程来完成这项任务,奇怪的是,为什么我在序列化程序中的验证方法不起作用,即使我完全从视频中复制了代码。 以下是我的查看功能: class UserLoginAPIView(APIView): permission_classes = [AllowAny] serializer_class = UserLoginSerializer def post(self, request, *args, **kwargs):

这是我在Rest框架中完成的第一项任务。我参考了一个视频教程来完成这项任务,奇怪的是,为什么我在序列化程序中的验证方法不起作用,即使我完全从视频中复制了代码。 以下是我的查看功能:

class UserLoginAPIView(APIView):

    permission_classes = [AllowAny]
    serializer_class = UserLoginSerializer

    def post(self, request, *args, **kwargs):
        data = request.data
        serializer = UserLoginSerializer(data=data)
        if serializer.is_valid(raise_exception=True):
            new_data = serializer.data
            return Response(new_data, status=HTTP_200_OK)  //I'm getting this response
        return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)
和我的序列化程序:

token = CharField(allow_blank=True, read_only=True)
username = CharField(required=False, allow_blank=True)
email = EmailField(label='Email Address', required=False, allow_blank=True)

class Meta:
    model = User
    fields = [
        'username',
        'email',
        'password',
        'token',
    ]
    extra_kwargs = {"password":
                        {"write_only": True}
                    }

    def validate(self, data):
        print("***************validating*******************")
        # user_obj = None
        email = data.get("email", None)
        username = data.get("username", None)
        password = data["password"]
        if not email and not username:
            raise ValidationError("A username or email is required to login.")
        user = User.objects.filter(
                Q(email=email) |
                Q(username=username)
            ).distinct()
        user = user.exclude(email__isnull=True).exclude(email__iexact='')
        print(user, "-------------*********************")
        if user.exists() and user.count() == 1:
            user_obj = user.first()
        else:
            raise ValidationError("This username/email is not valid.")
        if user_obj:
            if not user_obj.check_password(password):
                print("wrong pwd", "**************************************")
                raise ValidationError("Incorrect credentials! Please Try again!")
        data["token"] = "SOME RANDOM TOKEN"
        return data
类UserLoginSerializerModelSerializer:

token = CharField(allow_blank=True, read_only=True)
username = CharField(required=False, allow_blank=True)
email = EmailField(label='Email Address', required=False, allow_blank=True)

class Meta:
    model = User
    fields = [
        'username',
        'email',
        'password',
        'token',
    ]
    extra_kwargs = {"password":
                        {"write_only": True}
                    }

    def validate(self, data):
        print("***************validating*******************")
        # user_obj = None
        email = data.get("email", None)
        username = data.get("username", None)
        password = data["password"]
        if not email and not username:
            raise ValidationError("A username or email is required to login.")
        user = User.objects.filter(
                Q(email=email) |
                Q(username=username)
            ).distinct()
        user = user.exclude(email__isnull=True).exclude(email__iexact='')
        print(user, "-------------*********************")
        if user.exists() and user.count() == 1:
            user_obj = user.first()
        else:
            raise ValidationError("This username/email is not valid.")
        if user_obj:
            if not user_obj.check_password(password):
                print("wrong pwd", "**************************************")
                raise ValidationError("Incorrect credentials! Please Try again!")
        data["token"] = "SOME RANDOM TOKEN"
        return data

由于validate方法中的第一行没有被执行,我如何得到响应200_OK?请帮我解决这个问题。

哦,那只是一个愚蠢的语法错误。我的validate方法应该在UserLoginSerializer类中,而不是在Meta类中。

哦,那只是一个愚蠢的语法错误。我的validate方法应该在UserLoginSerializer类中,而不是在Meta类中。

您确定找到了正确的端点,并且正在调用视图的post方法吗?请在上下文中显示序列化程序的其余部分以及验证方法。请确保验证方法是UserLoginSerializer的一部分。首先,删除所有*.pyc`文件并重试。是否确定找到了正确的端点,并且正在调用视图的post方法?请在上下文中显示序列化程序的其余部分以及验证方法。请确保验证方法是UserLoginSerializer的一部分。首先,删除所有*.pyc`文件并重试。哈哈!你真傻。。。。但是等等:哦,我也因为同样的问题浪费了我的1个小时!谢谢你的指点,哈哈!你真傻。。。。但是等等:哦,我也因为同样的问题浪费了我的1个小时!非常感谢你指出