Неверный формат пароля или неизвестный алгоритм хеширования в представлении Django на основе классов - PullRequest
1 голос
/ 10 февраля 2020

Я хочу создать пользователя с помощью API. Но я получаю эту проблему:

enter image description here

serializers.py

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('username', 'password')

views.py

class UserRegistration(CreateAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer

Как я могу решить эту проблему?

1 Ответ

1 голос
/ 10 февраля 2020

Вы должны переопределить метод create() сериализатора на пароль ha sh перед сохранением нового объекта пользователя. Для этого вы можете использовать set_password:

 class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('username', 'password')

    def create(self, validated_data):
        user = User(
            username=validated_data['username']
        )
        user.set_password(validated_data['password'])
        user.save()
        return user

В противном случае User.password будет храниться в БД без хеширования, что небезопасно.

Также вы можете использовать create_user метод, который вызывает set_password по умолчанию:

 class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('username', 'password')

    def create(self, validated_data):
        return User.objects.create_user(**validated_data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...