Django rest framework user registration? Django rest framework user registration? django django

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.