Django Rest API - Как изменить пароль пользователя?
Я пытаюсь изменить пароль пользователя с помощью Django REST Framework (DRF), но получаю только пустой ответ и не понимаю почему, пожалуйста, посмотрите мой код.
url.py
re_path(r'^api/v1/user/change_password$', API_Views.change_password, name='api_change_password'),
views.py
@api_view(['PUT'])
@authentication_classes([JSONWebTokenAuthentication])
@permission_classes([IsAuthenticated])
def change_password(request,):
if request.method == 'PUT':
serializer = ChangePasswordSerializer(request.user)
return JsonResponse(serializer.data, safe=False)
serializers.py
class ChangePasswordSerializer(serializers.ModelSerializer):
password = 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', 'password', 'password2')
def validate(self, attrs):
if attrs['password'] != 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['password'])
instance.save()
return instance
Что мне здесь не хватает? Пожалуйста, взгляните также на запрос, который я создал
Вам необходимо добавить readonly=True
для поля old_password
, поскольку его нет в модели User, а также другие поля, которых нет в модели User. Также необходимо добавить эти поля в Meta.fields
.
В вашем случае, возможно, нет необходимости использовать serializers.ModelSerializer
. Вы можете обратиться к старой записи о смене пароля.