Django rest framework user registration?
I tried the accepted answer in DRF 3.0.2 and it didn't work. The password was not being hashed.
Instead, override the create method in your model serializer
def create(self, validated_data): user = User(email=validated_data['email'], username=validated_data['username']) user.set_password(validated_data['password']) user.save() return user
This hashes the password when you create a user using the rest framework, not post_save
Another approach for DRF 3.X:
from django.contrib.auth import get_user_modelfrom django.contrib.auth.hashers import make_password def create(self, validated_data): if validated_data.get('password'): validated_data['password'] = make_password( validated_data['password'] ) user = get_user_model().objects.create(**validated_data) return user
I've used wsgeorge's solution to build my own. A blank User
object is created just so I can use .set_password()
:
def create(self, validated_data): user = User() user.set_password(validated_data['password']) validated_data['password'] = user.password return super(UserSerializer, self).create(validated_data)
Different from his answer, I do not save the user myself. I leave that to the parent class calling super
.