Django rest framework django rest中所有用户的密码都在更改

Django rest framework django rest中所有用户的密码都在更改,django-rest-framework,Django Rest Framework,我已经为密码更改制作了一个API,但它正在更改所有用户的密码,而不是只更改一个用户的密码 序列发生器代码如下: class ChangePasswordSerializer(serializers.ModelSerializer): password1 = serializers.CharField(write_only=True, required=True, validators=[validate_password]) password2 = serializers.CharField(w

我已经为密码更改制作了一个API,但它正在更改所有用户的密码,而不是只更改一个用户的密码

序列发生器代码如下:

class ChangePasswordSerializer(serializers.ModelSerializer):
password1 = serializers.CharField(write_only=True, required=True, validators=[validate_password])
password2 = serializers.CharField(write_only=True, required=True)
old_password = serializers.CharField(write_only=True, required=True)

class Meta:
    model = User
    fields = ('old_password', 'password1', 'password2')

def validate(self, attrs):
    if attrs['password1'] != attrs['password2']:
        raise serializers.ValidationError({"password": "Password fields didn't match."})

    return attrs

def validate_old_password(self, value):
    user = self.context['request'].user
    if not user.check_password(value):
        raise serializers.ValidationError({"old_password": "Old password is not correct"})
    return value

def update(self, instance, validated_data):

    instance.set_password(validated_data['password1'])
    instance.save()
    return  instance
class ChangePasswordView(generics.UpdateAPIView):

queryset = User.objects.all()
permission_classes = (IsAuthenticated,)
serializer_class = ChangePasswordSerializer
查看代码如下:

class ChangePasswordSerializer(serializers.ModelSerializer):
password1 = serializers.CharField(write_only=True, required=True, validators=[validate_password])
password2 = serializers.CharField(write_only=True, required=True)
old_password = serializers.CharField(write_only=True, required=True)

class Meta:
    model = User
    fields = ('old_password', 'password1', 'password2')

def validate(self, attrs):
    if attrs['password1'] != attrs['password2']:
        raise serializers.ValidationError({"password": "Password fields didn't match."})

    return attrs

def validate_old_password(self, value):
    user = self.context['request'].user
    if not user.check_password(value):
        raise serializers.ValidationError({"old_password": "Old password is not correct"})
    return value

def update(self, instance, validated_data):

    instance.set_password(validated_data['password1'])
    instance.save()
    return  instance
class ChangePasswordView(generics.UpdateAPIView):

queryset = User.objects.all()
permission_classes = (IsAuthenticated,)
serializer_class = ChangePasswordSerializer

此代码有什么问题?

密码更改非常简单。Django已经有了一个表单来完成它。请尝试以下代码:

@api_视图(['PUT']))
@权限\u类([IsAuthenticated])
def更改_密码(请求):
表单=密码更改表单(request.user,request.data)
如果form.is_有效():
form.save()
serializer=UserSerializer(request.user)
返回响应(serializer.data)
返回响应(form.errors,status=status.HTTP\u 400\u BAD\u请求)
有关如何使用DRF构建用户身份验证方法的详细信息,请阅读本页:

此文件的url将采用以下格式:
url(r'change\u password/,views.change\u password)

感谢您回复我,您也可以告诉我此视图的url吗
url(r'change\u password//',change\u password)
这是给页面找不到的错误。我已经编辑了答案谢谢,还有一件事。它仅更改ID=1的密码。如何更改Id=2,3左右的用户的密码?它将更改当前登录用户的密码,即请求。用户好的,我感谢您的时间和耐心。非常感谢