Django 表单学习笔记
介绍
Django 是一个强大而又灵活的 Python Web 框架,用于快速开发 Web 应用程序。其中,表单是 Web 应用程序中必不可少的一部分,它提供了一种将用户输入数据发送到服务器端进行处理的机制。在这篇笔记中,我们将探讨 Django 表单的使用方法。
创建 Django 表单
要创建一个 Django 表单,我们需要定义一个继承自 Django 的 forms.Form
类的子类。在这个子类中,我们可以定义表单中包含的各种字段,如文本框、下拉列表、单选框等。
以下是一个简单的 Django 表单定义示例:
pythonCopy Codefrom django import forms
class ContactForm(forms.Form):
name = forms.CharField(max_length=100)
email = forms.EmailField()
subject = forms.CharField(max_length=200)
message = forms.CharField(widget=forms.Textarea)
在上面的示例中,我们定义了一个名为 ContactForm
的表单类,并在其中定义了四个字段:name
、email
、subject
和 message
。
渲染 Django 表单
在 Django 中,表单的渲染可以使用模板和视图来完成。首先,我们需要在视图函数中实例化表单,并将其传递给模板。接着,在模板中,我们可以使用 Django 的模板标签和过滤器来呈现表单。
以下是一个在视图函数中渲染表单的示例:
pythonCopy Codefrom django.shortcuts import render
from .forms import ContactForm
def contact(request):
form = ContactForm()
return render(request, 'contact.html', {'form': form})
在上面的示例中,我们实例化了 ContactForm
表单,并将其传递给了名为 contact.html
的模板。接着,在模板中,我们可以使用 Django 的模板标签和过滤器来呈现表单。
以下是一个基本的 contact.html
模板:
htmlCopy Code<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">提交</button>
</form>
在上面的模板中,我们使用了 Django 的模板标签来渲染表单。其中 {{ form.as_p }}
将表单渲染为带有 <p>
标签的 HTML 片段。
接收并处理表单数据
在用户提交表单后,我们需要在视图函数中接收并处理表单数据。要完成这个任务,我们需要使用 Django 的 request.POST
对象。
以下是一个在视图函数中处理表单数据的示例:
pythonCopy Codefrom django.shortcuts import render
from django.http import HttpResponse
from .forms import ContactForm
def contact(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
name = form.cleaned_data['name']
email = form.cleaned_data['email']
subject = form.cleaned_data['subject']
message = form.cleaned_data['message']
# 处理表单数据
return HttpResponse('表单已提交')
else:
form = ContactForm()
return render(request, 'contact.html', {'form': form})
在上面的示例中,我们首先检查请求方法是否为 POST。如果是,我们使用 request.POST
对象实例化表单,并使用 form.is_valid()
方法检查表单是否有效。如果表单有效,我们可以使用 form.cleaned_data
属性获取清理后的表单数据,并将其传递给相应的处理函数进行处理。
示例
以下是一个使用 Django 表单的示例:创建一个简单的求和表单。
pythonCopy Code# forms.py
from django import forms
class SumForm(forms.Form):
num1 = forms.IntegerField(label='第一个数')
num2 = forms.IntegerField(label='第二个数')
# views.py
from django.shortcuts import render
from django.http import HttpResponse
from .forms import SumForm
def index(request):
if request.method == 'POST':
form = SumForm(request.POST)
if form.is_valid():
num1 = form.cleaned_data['num1']
num2 = form.cleaned_data['num2']
result = num1 + num2
return HttpResponse(f'结果为:{result}')
else:
form = SumForm()
return render(request, 'index.html', {'form': form})
# index.html
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">计算</button>
</form>
在上面的示例中,我们首先定义了一个名为 SumForm
的表单类,并包含两个整数字段 num1
和 num2
。接着,在视图函数中,我们实例化了 SumForm
表单,并在模板中使用 {{ form.as_p }}
渲染了整个表单。最后,在处理表单数据时,我们从表单对象的 cleaned_data
属性中提取了清理过的数据,并进行了相应的计算。