密码验证/匹配在django中不起作用

时间:2017-05-05 12:32:02

标签: python django validation authentication passwords

我在登录页面上使用了以下两种方法,但是django允许用户使用不同的密码注册自己,并且没有显示ValidationError

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',
            ]

方法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

方法2:

    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
  

仅供参考使用django 1.10和python 3.4

1 个答案:

答案 0 :(得分:0)

这里有几个逻辑错误。

在您的第一个代码段中,您尝试获取password_confirm而不是password2

在您的第二个片段中,您将password2的值与其自身进行比较,而不是password1。

你不应该在任何一个片段中检查if password;已经由字段验证完成,并且在任何情况下,如果它们都没有提供已经是错误。

此外,您应该在表单中定义两次password2字段。你为什么这样做?