2012-07-06 96 views
11

我有一个配置文件设置页面,用户可以更改他们的密码,他们必须确认它,如果他们这样做。我无法将其设置为必填字段,因为他们不必更改密码。如果密码字段不为空,是否有一个验证确认密码的示例?然后检查它们是否相同?我无法找到任何这样的例子...django确认密码验证器

回答

24

以下内容添加到您的窗体的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 
+0

请参阅上面的编辑。 – 2012-07-06 20:45:01

+1

谢谢!我实际上只是在编辑之前找到了它。对于其他人的参考:https://docs.djangoproject.com/en/dev/ref/forms/validation/ – KVISH 2012-07-06 20:45:51

+0

我想你实际上是想'如果密码1和密码1!=密码2:'否则输入密码在'密码1'和'password2'中的任何内容都不会导致验证错误(假设您在两个字段上都有'required = False',这可能是'更改密码'表单) – Anentropic 2013-08-13 11:15:34