django4.2表单验证规则问题?

作者站长头像
站长
· 阅读数 10

自定义了一个表单验证类,但是在django中当我clean_UserName这个方法执行了并抛出异常的时候,其他的验证方法还会继续执行,怎么才能在一个验证方法抛出异常后其他的方法都中止执行呢?

class registerForm(forms.Form):
    UserName = forms.CharField(required=True,max_length=15,min_length=3,error_messages={
        'required':'用户名不能为空',
        'max_length':'用户名长度不能大于15个字母',
        'min_length':'用户名长度不能小于3个字母'
    })

    Password = forms.CharField(required=True,max_length=15,min_length=3,error_messages={
        'required':'密码不能为空',
        'max_length':'密码不能大于15个字母',
        'min_length':'密码长度不能小于3个字母'
    })

    Email = forms.CharField(required=True,error_messages={
        'required':'邮箱不能为空',
    })

    VerifyCode = forms.CharField(required=True,error_messages={
        'required':'验证码不能为空',
    })

    def clean_UserName(self):
        UserName = self.cleaned_data.get('UserName')
        user = User.objects.filter(username=UserName).exists()
        if user:            
            raise ValidationError('用户名已经存在')
        return UserName
    
    def clean_Email(self):
        Email = self.cleaned_data.get('Email')
        user = User.objects.filter(email=Email).exists()
        
        pattern = r'^[\w\.-]+@[\w\.-]+\.\w+$'
        if not re.match(pattern, Email):           
            raise ValidationError('邮箱格式错误')
        elif user:           
            raise ValidationError('邮箱已存在')
        return Email

    
    def clean_VerifyCode(self):
        VerifyCode = self.cleaned_data.get('VerifyCode')
        user = models.VerifyCode.objects.filter(VerifyCode=VerifyCode).exists()
        
        if not user:
            raise ValidationError('验证码错误')
        return VerifyCode
    
回复
1个回答
avatar
test
2024-06-30
def register(request):
    if request.method == 'POST':
        form = registerForm(request.POST)
        if form.is_valid():
            # 如果表单有效,保存数据
            pass
        else:
            # 如果表单无效,检查哪个字段出错,并停止其他验证
            if 'UserName' in form.errors:
                # 如果用户名验证失败,停止其他验证
                return render(request, 'register.html', {'form': form})
            elif 'Email' in form.errors:
                # 如果邮箱验证失败,停止其他验证
                return render(request, 'register.html', {'form': form})
            elif 'VerifyCode' in form.errors:
                # 如果验证码验证失败,停止其他验证
                return render(request, 'register.html', {'form': form})
    else:
        form = registerForm()
    return render(request, 'register.html', {'form': form})
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容