Django Rest Framework验证方法不起作用



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

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)

和我的序列化程序:

类UserLoginSerializer(ModelSerializer(:

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

由于验证方法中的第一行没有执行,我如何获得响应(200_OK(?请帮我做这件事。。

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

最新更新