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来简化表单渲染工作。