You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求解答Django中cleaned_data与is_valid的区别及示例

Django表单中is_valid()与cleaned_data的区别

核心差异一句话讲清:

  • is_valid() 是验证方法,用来检查用户提交的数据是否符合表单规则,返回布尔值True/False。
  • cleaned_data 是字典属性,只有在is_valid()返回True后,才会包含经过验证、格式转换后的安全数据。

简单示例

1. 先定义一个基础表单类

from django import forms

class UserForm(forms.Form):
    username = forms.CharField(max_length=50, required=True)
    age = forms.IntegerField(min_value=18, max_value=100)

2. 在视图中使用表单的完整流程

from django.shortcuts import render

def register(request):
    if request.method == 'POST':
        # 用用户提交的POST数据初始化表单
        form = UserForm(request.POST)
        
        # 第一步:调用is_valid()触发验证
        if form.is_valid():
            # 验证通过后,从cleaned_data取处理好的安全数据
            username = form.cleaned_data['username']
            age = form.cleaned_data['age']
            
            # 这里可以执行存数据库、发邮件等业务逻辑
            # User.objects.create(username=username, age=age)
            
            return render(request, 'success.html', {'username': username})
        else:
            # 验证失败,form.errors会包含错误提示,返回表单让用户修正
            return render(request, 'register.html', {'form': form})
    else:
        # GET请求返回空表单
        form = UserForm()
        return render(request, 'register.html', {'form': form})

关键细节提醒

  • 跳过is_valid()直接访问cleaned_data会得到空字典,因为验证流程没触发,数据没被清理转换。
  • is_valid()会自动完成数据转换:比如用户输入的age是字符串"25",它会转成整数25存入cleaned_data['age'];如果输入"abc",is_valid()返回False,cleaned_data保持为空。
  • 自定义校验逻辑(比如重写clean_xxx方法)也会在is_valid()调用时执行,校验通过后的结果才会进入cleaned_data。

举个自定义校验的例子:

class UserForm(forms.Form):
    username = forms.CharField(max_length=50, required=True)
    age = forms.IntegerField(min_value=18, max_value=100)
    
    def clean_username(self):
        username = self.cleaned_data.get('username')
        if username and 'admin' in username.lower():
            raise forms.ValidationError("用户名不能包含'admin'")
        return username

调用is_valid()时会执行这个校验,不符合规则就返回False,符合的话,处理后的username才会存入cleaned_data。

内容的提问来源于stack exchange,提问作者janezio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:16:01