gpt4 book ai didi

python - 如何在 django auth 密码验证器旁边使用自定义密码验证器?

转载 作者:太空狗 更新时间:2023-10-29 20:41:33 25 4
gpt4 key购买 nike

正如上面提到的问题,我会尝试在注册过程中使用某种额外的规则来验证密码。额外的规则应该是,如果密码至少包含一位数字、一个字母和一个特殊字符,则该密码有效。

我解决这个问题的方法我创建了一个名为 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 = "[~\!@#\$%\^&\*\(\)_\+{}\":;'\[\]]"
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', )

我不明白我是如何告诉 django 的,我的自定义密码验证器应该与 django AUTH_PASSWORD_VALIDATORS 一起使用。

最佳答案

因此,如 e4c5 所述,它非常简单明了。

我的 CustomPasswordValidator 看起来像这样:

from django.core.exceptions import ValidationError
from 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 ""

只需将其添加到 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.CustomPasswordValidator',

},]

关于python - 如何在 django auth 密码验证器旁边使用自定义密码验证器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43915518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com