当我尝试登录注册用户时遇到此错误。我在问同样问题的人中阅读了一堆答案,但没有一个人解决了我的问题,所以我对正在发生的事情感到困惑。我在我的设置中添加了一些内容,就像一些评论所说的那样,并更改了一些内容,到目前为止,这是我所写的,但无济于事。也许一些额外的眼睛会有所帮助。谢谢。
我将在此处展示我的序列化程序:
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(
email=validated_data['email'],
username=validated_data['username']
)
user.set_password(validated_data['password'])
user.save()
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 username and password:
user = authenticate(request=self.context.get('request'),
username=username, password=password)
if not user:
msg = 'Unable to log in with provided credentials.'
raise serializers.ValidationError(msg, code='authorization')
else:
msg = "Must include username and password."
raise serializers.ValidationError(msg, code='authorization')
data['user'] = user
return data
我对序列化程序的看法:
User = get_user_model()
class UserLoginAPIView(generics.CreateAPIView):
permission_classes = (permissions.AllowAny, )
serializer_class = serializers.UserLoginSerializer
def post(self, request, *args, **kwargs):
serializer = UserLoginSerializer(data=request.data, context={'request': request})
serializer.is_valid(raise_exception=True)
user = serializer.validated_data['user']
token, created = Token.objects.get_or_create(user=user)
return Response({"status": status.HTTP_200_OK, "Token": token.key})
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)