【问题标题】:django confirm password validatordjango 确认密码验证器
【发布时间】:2012-07-06 20:03:53
【问题描述】:

我有一个个人资料设置页面,用户可以在其中更改密码,如果更改,他们必须确认。我不能将此作为必填字段,因为他们不必更改密码。如果密码字段不为空,是否有验证确认密码的示例?然后检查它们是否相等?我找不到任何这样的例子......

【问题讨论】:

    标签: django validation


    【解决方案1】:

    将以下内容添加到表单的 clean 方法中:

    def clean(self):
        password1 = self.cleaned_data.get('password1')
        password2 = self.cleaned_data.get('password2')
    
        if password1 and password1 != password2:
            raise forms.ValidationError("Passwords don't match")
    
        return self.cleaned_data
    

    编辑

    上面的验证错误消息将进入non_field_errors。您没有指定每个密码字段上显示的错误消息,但根据上下文,我想这是“此字段是必需的”消息。如果是这种情况,请确保您的表单字段在定义它们时具有 required=False,或者如果您正在使用表单子类(并且无法编辑实际的表单字段),您可以覆盖 __init__ 的方法形式:

    class MyForm(SomeOtherForm):
        def __init__(self, *args, **kwargs):
            super(MyForm, self).__init__(*args, **kwargs)
    
            self.fields['password1'].required = False
            self.fields['password2'].required = False
    

    【讨论】:

    • 谢谢!实际上,我只是在您编辑之前才找到它。供其他人参考:docs.djangoproject.com/en/dev/ref/forms/validation
    • 我认为您实际上想要if password1 and password1 != password2:,否则在password1 中输入密码并且password2 中的任何内容都不会导致验证错误(假设您在两个字段中都有required=False,这很可能对于“更改密码”表格)
    • @Anentropic:很好的收获。我想我最初只是从注册表中复制过来的,实际上这两个字段都是必需的。
    • password2 是用户模型的一部分还是仅在表单中定义?
    • 我专门定义了verify_password字段,格式如下:verify_password = forms.CharField(widget=forms.PasswordInput())我不能让它工作。
    猜你喜欢
    • 1970-01-01
    • 2011-06-09
    • 2013-09-18
    • 2015-04-03
    • 2023-02-23
    • 2011-08-23
    • 2017-12-06
    • 2021-07-24
    • 1970-01-01
    相关资源
    最近更新 更多