我在同一表格中验证两个字段(密码和密码确认)时遇到了一些麻烦。
问题是,在使用我创建的方法验证密码后,当我尝试验证密码确认时,我无法再访问此变量,password = self.cleaned_data['password']
为'None'
。
class NewAccountForm(forms.Form):
password = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'narrow-input', 'required': 'true' }), required=True, help_text='Password must be 8 characters minimum length (with at least 1 lower case, 1 upper case and 1 number).')
password_confirm = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'narrow-input', 'required': 'true' }), required=True, )
def __init__(self, *args, **kwargs):
super(NewAccountForm, self).__init__(*args, **kwargs)
self.fields['password'].label = "Password"
self.fields['password_confirm'].label = "Password Confirmation"
“密码验证”< - 此验证正在运行。
def clean_password(self):
validate_password_strength(self.cleaned_data['password'])
第二次验证未正确执行,因为密码='无':
def clean_password_confirm(self):
password = self.cleaned_data['password']
password_confirm = self.cleaned_data.get('password_confirm')
print(password)
print(password_confirm)
if password and password_confirm:
if password != password_confirm:
raise forms.ValidationError("The two password fields must match.")
return password_confirm
如果已经通过第一种方法(clean_password)验证了第二次验证(clean_password_confirm)的变量,是否有办法将字段密码的输入用作变量?
感谢。
编辑:更新版本:
def clean(self):
cleaned_data = super(NewAccountForm, self).clean()
password = cleaned_data.get('password')
# check for min length
min_length = 8
if len(password) < min_length:
msg = 'Password must be at least %s characters long.' %(str(min_length))
self.add_error('password', msg)
# check for digit
if sum(c.isdigit() for c in password) < 1:
msg = 'Password must contain at least 1 number.'
self.add_error('password', msg)
# check for uppercase letter
if not any(c.isupper() for c in password):
msg = 'Password must contain at least 1 uppercase letter.'
self.add_error('password', msg)
# check for lowercase letter
if not any(c.islower() for c in password):
msg = 'Password must contain at least 1 lowercase letter.'
self.add_error('password', msg)
password_confirm = cleaned_data.get('password_confirm')
if password and password_confirm:
if password != password_confirm:
msg = "The two password fields must match."
self.add_error('password_confirm', msg)
return cleaned_data
答案 0 :(得分:7)
您可以在"material-ui": "^0.15.3",
"react": "^15.3.0",
"react-dom": "^15.3.0",
"react-router": "^2.6.1",
"react-tap-event-plugin": "^1.0.0",
"@types/material-ui": "^0.15.31",
"@types/node": "^6.0.32",
"@types/react": "^0.14.29",
"@types/react-dom": "^0.14.14",
"@types/react-router": "^2.0.30",
"typescript": "^2.1.0-dev.20160808",
方法中测试多个字段。
示例:
clean()
请参阅Cleaning and validating fields that depend on each other上的文档。