我正在尝试验证我用户的登录请求,但我一直收到“此用户名无效”的消息。尽管我之前确实注册过。目前唯一可以登录的是admin,但我没有通过注册页面创建admin。
什么地方不起作用,我该如何解决?
这些是序列化程序:
user = get_user_model()
class UserRegistrationSerializer(serializers.ModelSerializer):
username = serializers.CharField(
required=True,
validators=[UniqueValidator(queryset=User.objects.all(),lookup='iexact')]
)
email = serializers.CharField(
required=True,
validators=[UniqueValidator(queryset=User.objects.all(),lookup='iexact')]
)
password = serializers.CharField(
required=True,
label="Password",
style={'input_type': 'password'}
)
password_2 = serializers.CharField(
required=True,
label="Confirm Password",
style={'input_type': 'password'}
)
class Meta:
model = User
fields = ['username', 'email', 'password', 'password_2',]
def validate_password(self, value):
if len(value) < 8:
raise serializers.ValidationError(
"Password should be at least 8 characters long.")
return value
def validate_password_2(self, value):
data = self.get_initial()
password = data.get('password')
if password != value:
raise serializers.ValidationError("Passwords don't match.")
return value
def validate_username(self, value):
if User.objects.filter(username=value).exists():
raise serializers.ValidationError("Username already exists.")
return value
def create(self, validated_data):
user = User.objects.create_user(
username=validated_data['username'],
password=validated_data['password'],
email=validated_data['email']
)
return user
class UserLoginSerializer(serializers.ModelSerializer):
username = serializers.CharField(
required=True,
write_only=True,
)
token = serializers.CharField(
allow_blank=True,
read_only=True
)
password = serializers.CharField(
required=True,
write_only=True,
style={'input_type': 'password'}
)
class Meta(object):
model = User
fields = ['username', 'password', 'token']
def validate(self, data):
username = data.get('username', None)
password = data.get('password', None)
if not username:
raise serializers.ValidationError("Please enter username to login.")
user = User.objects.filter( Q(username=username))
if user.exists() and user.count() == 1:
user_obj = user.first()
else:
raise serializers.ValidationError("This username is not valid.")
if user_obj:
if not user_obj.check_password(password):
raise serializers.ValidationError("Invalid credentials.")
if user_obj.is_active:
token, created = Token.objects.get_or_create(user=user_obj)
data['token'] = token
else:
raise serializers.ValidationError("User not active.")
return data
这是 API 视图中的错误:
{
"non_field_errors": [
"This username is not valid."
]
}
这些是视图:
User = get_user_model()
class UserLoginAPIView(generics.CreateAPIView):
permission_classes = (permissions.AllowAny, )
serializer_class = serializers.UserLoginSerializer
def post(self, request):
serializer = self.serializer_class(data=request.data)
if serializer.is_valid(raise_exception=True):
return Response(serializer.data, status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class UserRegistrationAPIView(generics.CreateAPIView):
permission_classes = (permissions.AllowAny, )
serializer_class = serializers.UserRegistrationSerializer
def post(self, request):
serializer = self.serializer_class(data=request.data)
if serializer.is_valid(raise_exception=True):
return Response(serializer.data, status=status.HTTP_200_OK)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)