无名阁,只为技术而生。流水不争先,争的是滔滔不绝。

( Django clean) 详解Django的 clean() 函数:定义表单字段的清理行为 Django 表单 clean() 方法与重写 clean_() 方法 全网首发(图文详解1)

前沿技术 Micheal 4个月前 (06-06) 45次浏览 已收录 扫描二维码

( Django clean) 详解Django的 clean() 函数:定义表单字段的清理行为

Django 的 clean() 方法是表单系统中一个非常重要的部分,它负责验证和清理表单字段的数据。clean() 方法是在表单的 is_valid() 方法被调用时内部自动执行的,用于字段级别的数据清理和验证。如果你需要对某个字段进行特殊的清理或验证,你可以在你的 FormModelForm 子类中重写 clean_<fieldname>() 方法。如果你需要进行整体的清理操作,可以重写整个表单的 clean() 方法。

下面是详解 clean() 函数和重写 clean_<fieldname>() 方法的流程:

步骤 1: 定义你的表单类

首先,你需要一个表单类。这个类将继承自 django.forms.Formdjango.forms.ModelForm

步骤 2: 添加字段

在你的表单类内部,声明你需要的字段。

步骤 3: 重写 clean_<fieldname>() 方法

为了验证和清理特定字段的数据,你可以重写 clean_<fieldname>() 方法,其中 <fieldname> 是你想要清理的字段名。

步骤 4: 重写 clean() 方法

如果你需要执行跨字段的验证或清理操作,可以重写整个表单的 clean() 方法。

示例

下面是一个示例,展示了如何在 Django 表单中使用 clean()clean_<fieldname>()

from django import forms
from django.core.exceptions import ValidationError

class ContactForm(forms.Form):
    name = forms.CharField()
    email = forms.EmailField()
    age = forms.IntegerField()

    # 清理特定字段 'age'
    def clean_age(self):
        age = self.cleaned_data['age'] # 获取 age 字段的数据
        if age < 18:
            raise ValidationError('未满 18 岁') # 抛出异常,表明验证未通过
        return age # 返回清理后的数据

    # 清理整个表单
    def clean(self):
        cleaned_data = super().clean() # 首先获取默认的清理数据
        name = cleaned_data.get('name')
        email = cleaned_data.get('email')

        if name == email:
            raise ValidationError('名字和邮箱不能相同')

        # 可以在这里添加任何跨字段的验证逻辑
        return cleaned_data # 返回清理和验证后的数据

在上面的例子中,我们定义了 ContactForm 有三个字段:nameemailage。对于 age 字段,我们添加了 clean_age() 方法来确保用户的年龄至少为 18 岁。对于整个表单,我们重写了 clean() 方法来确保输入的 nameemail 不相同。

当你在视图中处理这个表单时,你会使用 is_valid() 方法来启动验证流程,该流程包括上述的清理方法:

def my_view(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            # 如果表单数据通过了验证
            # 处理数据 form.cleaned_data
            pass
        else:
            # 如果表单验证失败,将错误显示给用户
            pass
    else:
        form = ContactForm()

    # 渲染表单...

在此代码示例中,当 HTTP 请求方法为 POST 时,我们尝试验证提交的表单数据。如果数据通过验证,可以继续处理 form.cleaned_data 中的数据。如果验证失败,你会在表单模板中得到错误信息供用户修改。如果请求方法不是 POST,我们则提供一个空的表单供用户填写。
(python数组切片) Python高级特性——详解多维数组切片(Slice) 提取标题:Python 多维数组切片 NumPy 全网首发(图文详解1)
(中位数函数) 详解Python如何获取列表(List)的中位数 如何在Python中获取列表的中位数 全网首发(图文详解1)

喜欢 (0)
[]
分享 (0)
关于作者:
流水不争先,争的是滔滔不绝