2015-11-28 63 views
0

我試圖用PasswordInput()以安全的方式確認用戶密碼,但Django似乎只允許每個表單使用一個PasswordInput()。什麼是confirm_password以下實施的最佳方法:如何在Django中確認密碼?

class VerifyAccountsForm(forms.ModelForm): 
    username = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Username'}), label="") 
    password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Password'}), label="") 
    password_verify = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Verify password'}), label="") 

    def clean_password(self): 
     print self.cleaned_data 
     password1 = self.cleaned_data.get('password') 
     password2 = self.cleaned_data.get('password_verify') 
     if not password2: 
      raise forms.ValidationError("You must confirm your password") 
     if password1 != password2: 
     raise forms.ValidationError(_('Your passwords do not match'), code='invalid') 
     return password2 

clean_data的輸出是唯一的用戶名和密碼,沒有password_verify。

回答

0

如果你使用Django自己的usercreationform,你可以有兩個字段,here is how I used it

形式的clean_password2()函數比較兩個密碼輸入和驗證他們太強了,returns the second password

+0

謝謝。是否有可能在不使用模型的情況下實現這一點,但仍然安全地實施它? –

+0

@HC當然,你可以做到 – doniyor

0

我不知道是什麼給了你Django只允許每個表單輸入一個密碼的想法。你可以擁有儘可能多的,Django不會阻止你。

請注意,您的當前代碼是在驗證密碼時調用的,但會返回password_verify的值。

但是,如果你得到的東西你不期望從cleaned_data,你應該發佈乾淨的方法的代碼。