2017-05-05 61 views
0

我在登錄頁面使用了以下兩種方法,但django讓用戶使用不同的密碼註冊自己,並且沒有顯示ValidationErrordjango中的密碼驗證/匹配不起作用

from django import forms 

from django.contrib.auth import (
     authenticate, 
     get_user_model, 
    ) 

User = get_user_model() 

    class UserRegistrationForm(forms.ModelForm): 
     password = forms.CharField(widget=forms.PasswordInput) 
     password2 = forms.CharField(label='Confirm Password') 
     password2 = forms.CharField(widget=forms.PasswordInput) 

     class Meta: 
      model = User 
      fields = [ 
       'email', 
       'username', 
       'password', 
       'password2', 
      ] 

方法NO.1:

def clean(self): 
    cleaned_data = super(UserRegistrationForm, self).clean() 

    password = cleaned_data.get('password') 
    password2 = cleaned_data.get('password_confirm ') 

    if password and password2: 
     if password != password2: 
      raise forms.ValidationError("The two password fields must match.") 
    return cleaned_data 

方法二:

def clean_password(self): 
     password = self.cleaned_data.get('password') 
     password2 = self.cleaned_data.get('password2') 
     if password and password2 != password2: 
      raise forms.ValidationError('Passwords must match') 
     return self.cleaned_data 

FYI使用Django 1.10和python 3.4

+0

可以打印'密碼和password2' –

+0

密碼2 = forms.CharField(標籤= '確認密碼',窗口小部件= forms.PasswordInput) 密碼2 = forms.CharField(小部件= forms.PasswordInput) 爲什麼不 密碼2 = forms.CharField(標籤= '確認密碼',窗口小部件= forms.PasswordInput) – Exprator

+0

@AgamBanga'password'被打印但'password2'正顯示出'None' –

回答

0

您在這裏有幾個邏輯錯誤。

在你的第一個片段,你嘗試並獲得password_confirm而不是password2

在你的第二個片段,你密碼2的值進行比較,以本身,而不是密碼1。

你不應該在任一片段被檢查if password;這已經由字段驗證完成,並且在任何情況下,如果它們都不是已經提供的,那已經是錯誤了。

而且你應該在你的形式兩次定義password2領域。你爲什麼這麼做?

+0

仍然無法使用, 我在打印時將「password2」設置爲None。我該如何糾正它? –

+0

從另一個答案引用參考[http://stackoverflow.com/questions/11368947/django-confirm-password-validator](http://stackoverflow.com/questions/11368947/django-confirm-password-validator) –