Django表单验证不保留密码与ValidationError

时间:2015-11-20 20:51:49

标签: django django-forms passwords django-validation

我已经编写了基于清洁字段的验证。要检查我输入不匹配的密码,请从这两个字段中删除密码。这可能会惹恼用户。我想要这样“如果错误让用户改变一点......不要重新输入整个密码”。但是,用户名验证会在字段中保留用户名 错误之后。为什么会这样?

class signupform(ModelForm):
 prmqpass=forms.CharField(widget=forms.PasswordInput())
 prmqpass1=forms.CharField(widget=forms.PasswordInput())
 class Meta:
  model=prmqsignup
  exclude=['prmqactivated']

def clean_prmqpass(self):
  cd=self.cleaned_data
  pwd=cd.get("prmqpass")
  if len(str(pwd))<6:
   raise ValidationError("Password must be at least of six characters")
  if not passstrength(pwd):
   raise ValidationError("For stronger security password must contain at least one uppercase,lowercase,number and special character")
  return pwd

 def clean_prmquname(self):
  cd=self.cleaned_data
  usrname=cd.get("prmquname")
  if len(usrname)<5:
   raise ValidationError("Username too short choose more than four characters")
  if   prmqsignup.objects.exclude(pk=self.instance.pk).filter(prmquname=usrname).exists():
   raise ValidationError('Username "%s" is already in use.' % usrname)
  return usrname

 def clean(self):
  cd=self.cleaned_data
  pwd=cd.get("prmqpass")
  pwd1=cd.get("prmqpass1")
  if not pwd==pwd1:
   raise ValidationError("Passwords don't match.")
  return cd

为什么错误后的用户名值(保持形式)和密码值(闪烁)。参见验证逻辑是相同的。

1 个答案:

答案 0 :(得分:2)

来自documentation

  

密码输入:<input type='password' ...>

     

采用一个可选参数:

     

render_value:确定在验证错误(默认为False)后重新显示表单时窗口小部件是否会填入值。

所以你需要像这样初始化你的输入:

prmqpass = forms.CharField(widget=forms.PasswordInput(render_value=True))