首页 > 解决方案 > 如何在 Django 表单中进行密码和确认密码验证

问题描述

这是一个注册表单。当我输入不同的密码时,它不会显示任何错误。我参考了很多网站,请帮助我

    from django import forms
    from .models import *
    class signup_form(forms.Form):
          firstname = forms.CharField()
          lastname = forms.CharField()
          email = forms.EmailField()
          GENDER_CHOICES = (
            ('M', 'Male'),
            ('F', 'Female'),
        )
          Qual_choices = (
    ('UG', 'UG'),
    ('PG', 'PG')
    )
          gender = forms.ChoiceField( widget=forms.RadioSelect,choices=GENDER_CHOICES)
          qualification =           forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple,choices=Qual_choices)
          Password = forms.CharField(widget=forms.PasswordInput())
          ConfirmPassword = forms.CharField(widget=forms.PasswordInput())

          def clean(self):

               cleaned_data = super(signup_form, self).clean()
               password = cleaned_data.get('Password')
               confirm_password = cleaned_data.get('ConfirmPassword')
               if password and confirm_password:
                     if password != confirm_password:
                     raise forms.ValidationError('Password mismatch')

               return confirm_password

标签: pythondjangoforms

解决方案


你需要在 clean_data 之前添加 self

 def clean_password2(self):

    password1 = self.cleaned_data.get("password1")
    password2 = self.cleaned_data.get("password2")
    if password1 and password2 and password1 != password2:
        raise forms.ValidationError("Passwords do not match")
    return password2

如果表单经过验证,则执行此操作

  if register_form.is_valid():
            user = register_form.save(commit=False)
            user = register_form.save()
            username = form.cleaned_data.get('username')
            raw_password = register_form.cleaned_data.get('password1')
            user = authenticate(request, username=username, 
            password=raw_password)
            login(request, user)
            return redirect('some url')

推荐阅读