【发布时间】:2017-10-03 22:34:51
【问题描述】:
我在登录页面上使用了以下两种方法,但 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',
]
方法一:
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
方法二:
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
【问题讨论】:
-
可以打印
password and password2 -
password2 = forms.CharField(label='Confirm Password',widget=forms.PasswordInput) password2 = forms.CharField(widget=forms.PasswordInput) 为什么不用 password2 = forms.CharField(label='确认密码',widget=forms.PasswordInput)
-
@AgamBanga
password正在打印,但password2正在显示None -
@Exprator 是 django 的新手,所以尝试了一些东西。
-
使用方法 1 并将字段名称更改为您使用“password_confirm”的密码2。它会按你的意愿工作。
标签: python django validation authentication passwords