Django 表单学习笔记

介绍

Django 是一个强大而又灵活的 Python Web 框架,用于快速开发 Web 应用程序。其中,表单是 Web 应用程序中必不可少的一部分,它提供了一种将用户输入数据发送到服务器端进行处理的机制。在这篇笔记中,我们将探讨 Django 表单的使用方法。

创建 Django 表单

要创建一个 Django 表单,我们需要定义一个继承自 Django 的 forms.Form 类的子类。在这个子类中,我们可以定义表单中包含的各种字段,如文本框、下拉列表、单选框等。

以下是一个简单的 Django 表单定义示例:

pythonCopy Code
from 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 的表单类,并在其中定义了四个字段:nameemailsubjectmessage

渲染 Django 表单

在 Django 中,表单的渲染可以使用模板和视图来完成。首先,我们需要在视图函数中实例化表单,并将其传递给模板。接着,在模板中,我们可以使用 Django 的模板标签和过滤器来呈现表单。

以下是一个在视图函数中渲染表单的示例:

pythonCopy Code
from 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 Code
from 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 的表单类,并包含两个整数字段 num1num2。接着,在视图函数中,我们实例化了 SumForm 表单,并在模板中使用 {{ form.as_p }} 渲染了整个表单。最后,在处理表单数据时,我们从表单对象的 cleaned_data 属性中提取了清理过的数据,并进行了相应的计算。