Django 表单
Django中使用表单可以方便地从用户获取数据,并把这些数据存入数据库中。下面详细介绍Django中的表单。
表单类
Django中表单是由表单类构成的,表单类基于Python类创建。每个表单类都包含两部分:表单字段和表单方法。表单字段告诉Django表单需要从用户那里收集哪些数据,表单方法用于对数据进行验证和处理。以下是一个简单的表单类示例:
from django import forms
class MyForm(forms.Form):
name = forms.CharField(label='Your name', max_length=100)
email = forms.EmailField(label='Your email')
创建表单类时需要导入forms模块。在上面的例子中,我们定义了两个表单字段name和email,分别用于输入用户的姓名和邮箱。name字段使用label属性设置了表单标签的文本,max_length属性限制输入的文本长度。email字段使用EmailField类,以确保数据符合电子邮件地址的规范。
表单视图
表单类定义好后,需要在视图函数中引入并处理表单。视图函数首先需要导入表单类,然后将表单实例化。通过request.method
这个变量可以获取用户提交的表单数据,可以通过判断这个变量的值来确定是需要展示还是提交表单数据。以下是一个处理表单的视图函数:
from django.shortcuts import render
from .forms import MyForm
def myview(request):
if request.method == 'POST':
form = MyForm(request.POST)
if form.is_valid(): # 验证表单数据是否合法
name = form.cleaned_data['name'] # 从表单中获取输入的姓名
email = form.cleaned_data['email'] # 从表单中获取输入的邮箱
# 将数据存入数据库中
else:
form = MyForm()
return render(request, 'template.html', {'form':form})
视图函数首先判断request的方法是否为POST,如果是POST则实例化表单,并对表单进行验证。验证通过后,可以通过form.cleaned_data
属性获取用户输入的数据,然后可以将数据存入数据库中。如果是GET方法,则直接返回一个空白的表单。
渲染表单
在模板中,使用{{ form.as_p }}
标签可以将表单渲染成HTML代码。Django还支持其他多种渲染方式,如将表单渲染为表格,为每个表单字段分别渲染等。以下是几种渲染方式的示例:
将表单渲染为段落:
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Submit</button>
</form>
将表单渲染为表格:
<form method="POST">
{% csrf_token %}
<table>
{% for field in form %}
<tr>
<td>{{ field.label_tag }}</td>
<td>{{ field }}</td>
<td>{{ field.errors }}</td>
</tr>
{% endfor %}
</table>
<button type="submit">Submit</button>
</form>
将表单的每个字段分别渲染:
<form method="POST">
{% csrf_token %}
<div class="form-group">
{{ form.name.label_tag }}
{{ form.name }}
{{ form.name.errors }}
</div>
<div class="form-group">
{{ form.email.label_tag }}
{{ form.email }}
{{ form.email.errors }}
</div>
<button type="submit">Submit</button>
</form>
以上是Django表单的简单介绍,Django还提供了更多表单控件和验证方法以满足不同需要。对于大型表单项目,可以使用第三方包如django-crispy-forms来简化表单渲染工作。