2012-07-06 167 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