Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python &引用;无法使用提供的凭据登录。”;尝试登录我的用户时_Python_Django_Django Rest Framework - Fatal编程技术网

Python &引用;无法使用提供的凭据登录。”;尝试登录我的用户时

Python &引用;无法使用提供的凭据登录。”;尝试登录我的用户时,python,django,django-rest-framework,Python,Django,Django Rest Framework,我在尝试登录注册用户时遇到此错误。我读了很多关于人们问同样问题的答案,但是没有一个能解决我的问题,所以我对正在发生的事情感到困惑。我在我的设置中添加了一些东西,比如一些评论,并改变了一些东西,到目前为止,我写的这些东西都没有用。也许多看几眼会有帮助。多谢各位 我将在这里显示我的序列化程序: user = get_user_model() class UserRegistrationSerializer(serializers.ModelSerializer): username = s

我在尝试登录注册用户时遇到此错误。我读了很多关于人们问同样问题的答案,但是没有一个能解决我的问题,所以我对正在发生的事情感到困惑。我在我的设置中添加了一些东西,比如一些评论,并改变了一些东西,到目前为止,我写的这些东西都没有用。也许多看几眼会有帮助。多谢各位

我将在这里显示我的序列化程序:

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)

如果您不将请求传递给
身份验证
,会发生什么情况?只有用户名和密码。还有,你检查过外壳了吗?获取用户并执行
用户操作。检查\u password()
@gdef\u。感谢您的评论。在shell中尝试User.objects.get()时,会出现以下错误:AttributeError:Manager不可用;'身份验证用户“”已被替换为后端用户“”。我不确定这是否有关联。另外,如果我取消了身份验证,我会得到以下错误:字段“id”需要一个数字,但得到了。@gdef_u我可以解决管理器问题,但我仍然只能得到我的超级用户,而不能得到其他用户。