我在登录页面上使用了以下两种方法,但是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条答案
按热度按时间1tuwyuhd1#
这里有几个逻辑错误。
在第一个代码段中,您尝试获取
password_confirm
而不是password2
。在第二个代码段中,将password 2的值与其自身进行比较,而不是与password 1进行比较。
您不应该在任何一个代码段中检查
if password
;这已经由字段验证完成了,在任何情况下,如果它们都没有提供,那就已经是一个错误。同样,你应该在表单中定义两次
password2
字段。为什么要这样做呢?