2017-05-11 2 views
4

上記の質問として、私は登録プロセス中にパスワードを検証するためにある特別なルールを使用しようとします。 少なくとも1桁の数字、1文字、1文字の特殊文字がある場合は、パスワードの検証が必要です。django auth password validatorsの横にあるカスタムパスワードバリデータを使用するにはどうすればよいですか?

この問題を解決する私のアプローチ私はvalidators.pyという名前のファイルを作成しました。

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.')) 

マイカスタム登録フォームは次のようになります。

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',) 

私は私のカスタムパスワードバリデータはジャンゴAUTH_PASSWORD_VALIDATORS横に使用する必要がありますことを、私はジャンゴを教えてどのようにそれを得ることはありません。

+0

質問が不明です。あなたはカスタムのパスワードバリデーターを使いたいのですが、settings.pyで 'AUTH_PASSWORD_VALIDATORS'を変更したくないのですか?それは? – e4c5

+0

私はAUTH_PASSWORD_VALIDATORSを変更したくありません。私は自分自身を作成し​​、他の人の横に追加するだけです。 – Texas

+0

そのステートメントは「p – e4c5

答えて

9

e4c5が述べたように、それは本当に簡単で簡単です。

マイCustomPasswortValidatorは次のようになります。

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 "" 

ただ、settings.pyにAUTH_PASSWORD_VALIDATORSのリストに追加し、それはそれです!

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

となります。あなた自身の答えを受け入れることができます:-) – e4c5

関連する問題