How to use custom password validators beside the django auth password validators?
So, as e4c5 mentioned, it is really simple and straightforward.
My CustomPasswordValidator looks like this:
from django.core.exceptions import ValidationErrorfrom django.utils.translation import ugettext as _class CustomPasswordValidator(): def __init__(self, min_length=1): self.min_length = min_length def validate(self, password, user=None): special_characters = "[~\!@#\$%\^&\*\(\)_\+{}\":;'\[\]]" if not any(char.isdigit() for char in password): raise ValidationError(_('Password must contain at least %(min_length)d digit.') % {'min_length': self.min_length}) if not any(char.isalpha() for char in password): raise ValidationError(_('Password must contain at least %(min_length)d letter.') % {'min_length': self.min_length}) if not any(char in special_characters for char in password): raise ValidationError(_('Password must contain at least %(min_length)d special character.') % {'min_length': self.min_length}) def get_help_text(self): return ""
Just add it to the list of AUTH_PASSWORD_VALIDATORS in settings.py and that's it!
AUTH_PASSWORD_VALIDATORS = [{ 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',},{ 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',},{ 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',},{ 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',},{ 'NAME': 'registration.validators.CustomPasswordValidator',},]