Last active
March 22, 2023 23:30
-
-
Save leafsummer/f4d67b58a4cc77174c31935d7e299c9e to your computer and use it in GitHub Desktop.
integrate django password validators with django rest framework validate_password
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import django.contrib.auth.password_validation as validators | |
from rest_framework import serializers | |
class RegisterUserSerializer(serializers.ModelSerializer): | |
password = serializers.CharField(style={'input_type': 'password'}, write_only=True) | |
class Meta: | |
model = User | |
fields = ('id', 'username', 'email, 'password') | |
def validate_password(self, data): | |
# validators.validate_password(password=data, user=User) | |
# return data | |
# here data has all the fields which have validated values | |
# so we can create a User instance out of it | |
user = User(**data) | |
# get the password from the data | |
password = data.get('password') | |
errors = dict() | |
try: | |
# validate the password and catch the exception | |
validators.validate_password(password=password, user=user) | |
# the exception raised here is different than serializers.ValidationError | |
except exceptions.ValidationError as e: | |
errors['password'] = list(e.messages) | |
if errors: | |
raise serializers.ValidationError(errors) | |
return super(RegisterUserSerializer, self).validate(data) | |
def create(self, validated_data): | |
user = User.objects.create_user(**validated_data) | |
user.is_active = False | |
user.save() | |
return user |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@Adegitetaiwo I had the same problem.
I changed line 18 to
And it worked better for me.