在 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。每个字段都有对应的表单字段类型,如 CharField
、EmailField
和 Textarea
。这些字段类型可以帮助我们自动进行数据验证和格式化。
创建好表单类后,我们需要在视图函数中渲染表单并将其传递给模板。以下是一个示例:
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}$', "手机号码格式不正确")
]
通过这种方式,我们可以根据业务需求定制表单的行为,提高用户体验和数据质量。