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

c3frrgcw  于 2022-11-28  发布在  Python
关注(0)|答案(1)|浏览(164)

我在登录页面上使用了以下两种方法,但是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的参考消息

1tuwyuhd

1tuwyuhd1#

这里有几个逻辑错误。
在第一个代码段中,您尝试获取password_confirm而不是password2
在第二个代码段中,将password 2的值与其自身进行比较,而不是与password 1进行比较。
您不应该在任何一个代码段中检查if password;这已经由字段验证完成了,在任何情况下,如果它们都没有提供,那就已经是一个错误。
同样,你应该在表单中定义两次password2字段。为什么要这样做呢?

相关问题