我正在尝试使用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 password2clean_data的输出只有用户名和密码,没有password_verify。
发布于 2015-11-28 11:42:00
如果你使用django自己的用户创建表单,你可以同时拥有两个字段,here is how I used it
form的clean_password2()函数比较两个密码输入并验证它们,以及returns the second password。
发布于 2015-11-28 17:45:38
我不知道为什么Django只允许每个表单输入一次密码。你想吃多少就吃多少,姜戈不会阻止你的。
请注意,您当前的代码在验证密码时被调用,但返回password_verify的值。
然而,如果你从cleaned_data得到了一些你不想要的东西,你应该发布clean方法的代码。
发布于 2018-10-19 16:20:36
在forms.py中将def clean_password(self):更改为def clean_password2(self):,并在HTML注册表单(registraton.html)中将{{ form.password2.errors.as_text }}写在密码输入字段的正上方。
https://stackoverflow.com/questions/33966736
复制相似问题