如上述问题所提及,我将尝试在注册过程中使用某个特定的额外规则来验证密码。
这个额外规则应该是:如果密码至少包含一个数字、一个字母和一个特殊字符,则密码是有效的。
我的解决方法是创建了一个名为 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的同时,也使用我的自定义密码验证器。
我不明白如何告诉Django,让它在使用Django AUTH_PASSWORD_VALIDATORS的同时,也使用我的自定义密码验证器。
AUTH_PASSWORD_VALIDATORS
吗?是这样吗? - e4c5