Django如何在提交注册表后获取密码?

时间:2016-10-28 15:17:57

标签: python django forms passwords django-registration

我正在尝试修改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函数,但没有帮助。这可行吗?怎么会这样?

感谢您的帮助,

1 个答案:

答案 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']