如何在Django中确认密码?

时间:2015-11-28 01:31:44

标签: django django-forms django-views

我正在尝试使用PasswordInput()以安全的方式确认用户密码,但Django似乎只允许每个表单一个PasswordInput()。以下是实施confirm_password的最佳方式:

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。

3 个答案:

答案 0 :(得分:0)

如果你使用django自己的usercreationform,你可以同时拥有两个字段here is how I used it

form clean_password2()函数比较两个密码输入并验证它们,returns the second password

答案 1 :(得分:0)

我不知道是什么让你觉得Django只允许每个表单输入一个密码。你可以拥有任意多的,Django不会阻止你。

请注意,您在验证密码时会调用当前代码,但会返回password_verify的值。

但是,如果你收到了clean_data所不能想到的东西,你应该发布clean方法的代码。

答案 2 :(得分:0)

def clean_password(self):更改为def clean_password2(self): 在forms.py和HTML注册表单(registraton.html)中,在密码输入字段的上方写上{{ form.password2.errors.as_text }}