2017-05-11 4 views
4

Wie oben erwähnt, werde ich versuchen, eine bestimmte zusätzliche Regel zu verwenden, um ein Passwort während der Registrierung zu validieren. Die zusätzliche Regel sollte sein, dass ein Passwort gültig ist, wenn es mindestens eine Ziffer, einen Buchstaben und ein Sonderzeichen hat.Wie benutze ich benutzerdefinierte Password Validatoren neben den Django Auth Passwort-Validatoren?

Mein Lösungsansatz für dieses Problem Ich habe eine Datei namens validators.py erstellt.

from django.core.exceptions import ValidationError 

class CustomPasswortValidator: 

    def validate(value): 

     # check for digit 
     if not any(char.isdigit() for char in value): 
      raise ValidationError(_('Password must contain at least 1 digit.')) 

     # check for letter 
     if not any(char.isalpha() for char in value): 
      raise ValidationError(_('Password must contain at least 1 letter.')) 

     # check for special character 
     special_characters = "[~\[email protected]#\$%\^&\*\(\)_\+{}\":;'\[\]]" 
     if not any(char in special_characters for char in value): 
     raise ValidationError(_('Password must contain at least 1 letter.')) 

Mein benutzerdefiniertes Anmeldeformular wie folgt aussieht:

from django import forms 
from django.contrib.auth.forms import UserCreationForm 
from django.contrib.auth.models import User 


class RegistrationForm(UserCreationForm): 
    first_name = forms.CharField(max_length=30, required=False,           
           help_text='Optional.') 
    last_name = forms.CharField(max_length=30, required=False, 
           help_text='Optional.') 
    email = forms.EmailField(max_length=254, help_text='Required. Inform a valid email address.') 

    class Meta: 
     model = User 
     fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2',) 

ich es nicht bekomme, wie ich django sagen, dass mein benutzerdefinierte Passwort-Validator Verwendung neben dem django AUTH_PASSWORD_VALIDATORS sein sollte.

+0

Ihre Frage ist nicht klar. Sie möchten einen benutzerdefinierten Passwort-Validator verwenden, aber Sie möchten 'AUTH_PASSWORD_VALIDATORS' in settings.py nicht ändern? ist es das? – e4c5

+0

Richtig, ich möchte AUTH_PASSWORD_VALIDATORS nicht ändern. Ich möchte mein eigenes erstellen und es neben den anderen hinzufügen. – Texas

+0

diese Aussage löscht die Dinge nicht p – e4c5

Antwort

9

So, wie e4c5 erwähnt, ist es wirklich einfach und unkompliziert.

Mein CustomPasswortValidator sieht wie folgt aus:

from django.core.exceptions import ValidationError 
from django.utils.translation import ugettext as _ 

class CustomPasswortValidator(object): 

    def __init__(self, min_length=1): 
     self.min_length = min_length 

    def validate(self, password, user=None): 
     special_characters = "[~\[email protected]#\$%\^&\*\(\)_\+{}\":;'\[\]]" 
     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 "" 

Gerade in settings.py in die Liste der AUTH_PASSWORD_VALIDATORS hinzufügen und das ist es!

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.CustomPasswortValidator', 

},] 
+0

Sie können Ihre eigene Antwort akzeptieren und Sie sollten wahrscheinlich :-) – e4c5

Verwandte Themen