我在Django中创建了一个ModelForm来注册新用户。它有4个字段(username
,email
,password
和confirm_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.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
}
]
它已经在settings.py中,但我的表单密码未经过验证
答案 0 :(得分:2)
您想阅读有关Password Validation的Django文档。
总结一下,您需要更新AUTH_PASSWORD_VALIDATORS
中的settings.py
设置。
Django附带了一些内置的密码验证器:
UserAttributeSimilarityValidator
(检查密码与用户属性集之间的相似性)MinimumLengthValidator
(检查密码是否符合最小长度)CommonPasswordValidator
(检查密码是否出现在常用密码列表中)NumericPasswordValidator
(检查密码是否完全不是数字)根据您在问题中说明的示例验证,您希望使用MinimumLengthValidator
和UserAttributeSimilarityValidator
。
由于您使用的是表单,因此需要在验证表单时调用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])