python - Django - 使用 AUTH_PASSWORD_VALIDATORS 验证密码

标签 python django

我有一个自定义的 User 模型,它只包含两个必填字段:emailpassword

我还有一个自定义的 UserCreationForm,提示用户输入他们的 emailone 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

关于python - Django - 使用 AUTH_PASSWORD_VALIDATORS 验证密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52322148/

相关文章:

python - 如何使用 django-south 恢复删除的表?

python - 如何从python中的绑定(bind)方法中提取值?

Python (Windows Server) Virtualenv 无法识别 Django 已安装

python - Django官方模型教程part4

python - Pandas 加入/合并 'Reindexing only valid with uniquely valued Index '

python - 使用 Facebook Prophet 同时预测多个变量

python - Selenium - 在 Python 中旋转标签

python - Matplotlib 中的极坐标图未居中

python - 要添加到新列表 Python/Django 中的特定元素排序

python - EC2 Amazon Beanstalk 上的 django-admin.py 和 python 路径