我正在尝试使用PasswordInput()以安全的方式确认用户密码,但Django似乎只允许每个表单一个PasswordInput()。以下是实施confirm_password的最佳方式:
class VerifyAccountsForm(forms.ModelForm):
username = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Username'}), label="")
password = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Password'}), label="")
password_verify = forms.CharField(widget=forms.PasswordInput(attrs={'placeholder': 'Verify password'}), label="")
def clean_password(self):
print self.cleaned_data
password1 = self.cleaned_data.get('password')
password2 = self.cleaned_data.get('password_verify')
if not password2:
raise forms.ValidationError("You must confirm your password")
if password1 != password2:
raise forms.ValidationError(_('Your passwords do not match'), code='invalid')
return password2
clean_data的输出只是用户名和密码,没有password_verify。
答案 0 :(得分:0)
如果你使用django自己的usercreationform,你可以同时拥有两个字段here is how I used it
form clean_password2()
函数比较两个密码输入并验证它们,returns the second password。
答案 1 :(得分:0)
我不知道是什么让你觉得Django只允许每个表单输入一个密码。你可以拥有任意多的,Django不会阻止你。
请注意,您在验证密码时会调用当前代码,但会返回password_verify的值。
但是,如果你收到了clean_data所不能想到的东西,你应该发布clean方法的代码。
答案 2 :(得分:0)
将def clean_password(self):
更改为def clean_password2(self):
在forms.py和HTML注册表单(registraton.html)中,在密码输入字段的上方写上{{ form.password2.errors.as_text }}
。