手机版 收藏 导航

Django 表单(Form)如何处理

原创   www.link114.cn   2023-09-24 12:29:59

Django 表单(Form)如何处理

在 Django 中,我们可以通过两种方式创建表单:使用 Django 内置的表单类 django.forms.Form,或者继承自该类来创建自定义的表单类。以下是一个简单的表单示例:

from django import forms

class ContactForm(forms.Form):
    name = forms.CharField(max_length=100)
    email = forms.EmailField()
    message = forms.CharField(widget=forms.Textarea)

在这个表单中,我们定义三个字段:name、email 和 message。每个字段都有对应的表单字段类型,如 CharFieldEmailFieldTextarea。这些字段类型可以帮助我们自动进行数据验证和格式化。

创建好表单类后,我们需要在视图函数中渲染表单并将其传递给模板。以下是一个示例:

from django.shortcuts import render
from .forms import ContactForm

def contact_view(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            # 处理表单数据
            pass
    else:
        form = ContactForm()
    return render(request, 'contact.html', {'form': form})

在这个视图函数中,我们首先检查请求方式是否为 POST。是 POST 请求,我们使用 request.POST 数据创建表单对象,并调用 is_valid() 方法进行数据验证。验证通过,我们就可以处理表单数据。是 GET 请求,我们创建一个空的表单对象并将其传递给模板。

在模板中,我们可以使用 {{ form }} 渲染整个表单,或者单独�染每个字段,如 {{ form.name }}

当表单验证通过后,我们可以通过 form.cleaned_data 属性获取表单数据,并进行后续的处理。例如:

if form.is_valid():
    name = form.cleaned_data['name']
    email = form.cleaned_data['email']
    message = form.cleaned_data['message']
    # 执行相应的操作,如发送邮件等

需要注意的是,form.cleaned_data 中只包含通过验证的数据,我们可以直接使用它们,不需要再进行数据清理和验证。

除使用 Django 内置的表单字段类型,我们还可以自定义表单字段和验证规则。例如,我们可以创建一个自定义的 PhoneField 字段,并为其添加特定的验证逻辑:

from django.core.validators import RegexValidator

class PhoneField(forms.CharField):
    default_validators = [
        RegexValidator(r'^\+?1?\d{9,15}$', "手机号码格式不正确")
    ]

通过这种方式,我们可以根据业务需求定制表单的行为,提高用户体验和数据质量。