我在登录页面上使用了以下两种方法,但是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
答案 0 :(得分:0)
这里有几个逻辑错误。
在您的第一个代码段中,您尝试获取password_confirm
而不是password2
。
在您的第二个片段中,您将password2的值与其自身进行比较,而不是password1。
你不应该在任何一个片段中检查if password
;已经由字段验证完成,并且在任何情况下,如果它们都没有提供已经是错误。
此外,您应该在表单中定义两次password2
字段。你为什么这样做?