-
-
Save mitrofun/58ddb308f6dfcbaeac2e568228502131 to your computer and use it in GitHub Desktop.
integrate django password validators with django rest framework validate_password
This file contains hidden or 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