我有一个自定义的 User
模型,它只包含两个必填字段:email
和 password
。
我还有一个自定义的 UserCreationForm
,提示用户输入他们的 email
和 one password
。
不幸的是,除了 min_length
之外,表单不会验证密码。
如何在 settings.AUTH_PASSWORD_VALIDATORS
中启用密码验证器?该对象是 distc 的列表,而不是验证器,所以我不确定如何使用它们。
class UserCreationForm(forms.ModelForm):
password1 = forms.CharField(
widget=forms.PasswordInput(attrs=form_attrs.password),
min_length=8,
strip=True,
)
class Meta:
model = User
fields = ('email',)
widgets = {
'email': forms.EmailInput(attrs=form_attrs.email),
}
def save(self, commit=True):
user = super().save(commit=False)
user.set_password(self.cleaned_data.get('password1'))
if commit:
user.save()
return user
正如另一位回答者提到的,Django 使用 django.contrib.auth.password_validation.validate_password
方法来验证密码。您可以创建一个 clean_password1
方法并将其添加到其中,如下所示:
class UserCreationForm(forms.ModelForm):
password1 = forms.CharField(
widget=forms.PasswordInput(attrs=form_attrs.password),
min_length=8,
strip=True,
)
class Meta:
model = User
fields = ('email',)
widgets = {
'email': forms.EmailInput(attrs=form_attrs.email),
}
def clean_password1(self):
password1 = self.cleaned_data.get('password1')
try:
password_validation.validate_password(password1, self.instance)
except forms.ValidationError as error:
# Method inherited from BaseForm
self.add_error('password1', error)
return password1
我是一名优秀的程序员,十分优秀!