Django - 在ModelForm中添加密码验证

时间:2017-12-15 19:18:02

标签: python django django-forms

我在Django中创建了一个ModelForm来注册新用户。它有4个字段(usernameemailpasswordconfirm_password)。我想为密码添加一些验证。例如,如果密码短于8个字符或密码与用户名相似,则会引发错误消息。我怎么能这样做?

这是我的forms.py文件:

from django.contrib.auth.models import User
from django import forms


class user_form(forms.ModelForm):
    password = forms.CharField(widget = forms.PasswordInput)
    confirm_password = forms.CharField(widget = forms.PasswordInput)

    class Meta:
        model = User
        fields = ['username','email', 'password','confirm_password']

我的settings.py已包含以下验证码:

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimila‌​rityValidator', 
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValida‌​tor',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValid‌​ator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordVali‌​dator',
    }
]

它已经在settings.py中,但我的表单密码未经过验证

2 个答案:

答案 0 :(得分:2)

您想阅读有关Password Validation的Django文档。

总结一下,您需要更新AUTH_PASSWORD_VALIDATORS中的settings.py设置。

Django附带了一些内置的密码验证器:

  1. UserAttributeSimilarityValidator(检查密码与用户属性集之间的相似性)
  2. MinimumLengthValidator(检查密码是否符合最小长度)
  3. CommonPasswordValidator(检查密码是否出现在常用密码列表中)
  4. NumericPasswordValidator(检查密码是否完全不是数字)
  5. 根据您在问题中说明的示例验证,您希望使用MinimumLengthValidatorUserAttributeSimilarityValidator

    由于您使用的是表单,因此需要在验证表单时调用django.contrib.auth.password_validation.validate_password来手动触发Django docs中所述的密码验证。

答案 1 :(得分:0)

在forms.py文件中,您可以使用它来验证设置中定义的所有验证的密码。如果您未在设置文件中定义任何验证器,请调用要验证的特定验证器。

from django.contrib.auth.password_validation import validate_password`
from django.core import validators
from django import forms
class User_profileForm(forms.ModelForm):
password=forms.CharField(widget=forms.PasswordInput,validators=[validate_password])