我正在尝试修改django-registration
RegistrationFormUniqueEmail
表格,目前看起来如下:
class RegistrationFormUniqueEmail(RegistrationForm):
"""
Subclass of ``RegistrationForm`` which enforces uniqueness of
email addresses.
"""
def clean_email(self):
"""
Validate that the supplied email address is unique for the
site.
"""
if User.objects.filter(email__iexact=self.cleaned_data['email']):
raise forms.ValidationError(validators.DUPLICATE_EMAIL)
return self.cleaned_data['email']
我想实现一个表单来检查密码是否有数字和特殊字符,但是我没有得到密码?我不确定它是否可能,但这是我试图获取密码的地方:
self.cleaned_data['id_password2']
self.cleaned_data['password2']
self.cleaned_data['password']
self.cleaned_data.get('id_password2')
self.cleaned_data.get('password2')
self.cleaned_data.get('password')
所有这些都返回一个NoneType对象。
我还试图定义一个clean_password2
函数,但没有帮助。这可行吗?怎么会这样?
感谢您的帮助,
答案 0 :(得分:1)
创建表单时,清理的数据不是属性,在表单上调用is_valid()时会添加该属性。
is_valid()将检查数据是否符合您在创建表单时所添加的约束(在这种情况下,默认情况下为RegistrationFormUniqueEmail匹配密码和唯一电子邮件)。除了对密码强度执行额外检查之外,覆盖is_valid()或创建另一个调用is_valid()的函数可能是有意义的,而不是在标准过程之外执行其他验证
def custom_is_valid(self):
valid = self.is_valid()
if password.is.not.secure():
self.add_error('password', ValidationError(('Insecure Password'), code='invalid'))
valid = False
return valid
上面的剪辑可能会成功。添加错误时,字符串'password'会将其添加到您指定的表单字段中,您可能需要使用password1或password2,因为我认为这是您正在使用的表单中的构建的字段名称。此外,您不会使用cleaning_data来检查密码有效性。您只需使用数据属性form.data ['password']