CCCPaste

Validator password

ДОПЪЛНИТЕЛНА ВАЛИДАЦИЯ НА ПАРОЛАТА НА USER (Server-side validation)

class MyHolidayUserCreationForm(auth_forms.UserCreationForm):
    user = None
    password1 = forms.CharField(
        label="Password",
        strip=False,
        widget=forms.PasswordInput,
        validators=[validate_password],
    )
    password2 = forms.CharField(
        label="Password confirmation",
        widget=forms.PasswordInput,
        strip=False,
    )

    class Meta(auth_forms.UserCreationForm.Meta):
        model = UserModel
        fields = ('email',)

ДОБАВЯМ МОЯ ВАЛИДАТОВ СЛЕД ВГРАДЕНИТЕ В settings.py - AUTH_PASSWORD_VALIDATORS:

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'accounts.validators.validate_password',
    },
]

valdators.py

from django.core.exceptions import ValidationError


def validate_password(password):

    has_letter = False
    has_digit = False
    has_underscore = False

    for char in password:
        if char.isalpha():
            has_letter = True
        elif char.isdigit():
            has_digit = True
        elif char == '_':
            has_underscore = True

    if not has_letter:
        raise ValidationError("Password must contain at least one letter.")

    if not has_digit:
        raise ValidationError("Password must contain at least one digit.")

    if not has_underscore:
        raise ValidationError("Password must contain at least one underscore.")