I want to create user by API view. But I get this problem:
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
How can I solve this problem?
Advertisement
Answer
You should override serializer’s create() method to hash password before saving new user object. You can use set_password for this:
 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
Otherwise User.password will be stared in DB without hashing which is not secure.
Also you can use create_user method which is calling set_password by defaut:
 class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('username', 'password')
    def create(self, validated_data):
        return User.objects.create_user(**validated_data)
 
						