I want to create user by API view. But I get this problem:
serializers.py
JavaScript
x
5
1
class UserSerializer(serializers.ModelSerializer):
2
class Meta:
3
model = User
4
fields = ('username', 'password')
5
views.py
JavaScript
1
4
1
class UserRegistration(CreateAPIView):
2
queryset = User.objects.all()
3
serializer_class = UserSerializer
4
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:
JavaScript
1
13
13
1
class UserSerializer(serializers.ModelSerializer):
2
class Meta:
3
model = User
4
fields = ('username', 'password')
5
6
def create(self, validated_data):
7
user = User(
8
username=validated_data['username']
9
)
10
user.set_password(validated_data['password'])
11
user.save()
12
return user
13
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:
JavaScript
1
8
1
class UserSerializer(serializers.ModelSerializer):
2
class Meta:
3
model = User
4
fields = ('username', 'password')
5
6
def create(self, validated_data):
7
return User.objects.create_user(**validated_data)
8