Django 表单处理视图

2023-04-11 00:00:00 django 视图 表单

在 Django 中,表单处理视图是用来处理用户提交的表单数据的视图函数。该视图函数负责检查并验证用户提交的表单数据,并将合法的数据保存到数据库中或发送到其他服务端点。

下面是一个简单的示例,演示如何使用 Django 表单处理视图:

from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.urls import reverse
from .forms import ContactForm

def contact(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            # 处理表单数据,保存到数据库
            form.save()
            return HttpResponseRedirect(reverse('contact_success'))
    else:
        form = ContactForm()

    return render(request, 'contact.html', {'form': form})

def contact_success(request):
    return render(request, 'contact_success.html')

在上面的代码中,我们创建了一个名为 contact 的视图函数,该函数展示了一个联系表单,并处理用户提交的数据。当用户访问该表单时,Django 将渲染 contact.html 模板,并呈现给用户。如果用户提交了一个有效的表单,我们将保存表单数据并重定向到 contact_success 视图。

contact 视图中,我们首先检查用户请求方法是 POST 还是 GET。如果请求方法是 POST,则我们创建一个新的 ContactForm 实例,并使用用户提交的表单数据进行初始化。然后使用 is_valid() 方法验证该表单是否有效,如果有效,则将其保存到数据库中。

如果请求方法是 GET,则我们初始化一个空的 ContactForm 实例,并将其传递给模板进行渲染。

最后,我们将视图中该模板所需的数据以字典的形式传递给 render() 函数,以便将表单呈现给用户。

需要特别注意的是,ContactForm 实例应该在模板中渲染时传递给模板上下文,以便将表单数据预填充到表单字段中。表单字段中的数据可以通过调用表单实例的 initial 属性设置。

from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.urls import reverse
from .forms import ContactForm

def contact(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            # 处理表单数据,保存到数据库
            form.save()
            return HttpResponseRedirect(reverse('contact_success'))
    else:
        initial_data = {
            'name': 'pidancode.com',
            'email': 'info@pidancode.com',
            'message': '欢迎来到皮蛋编程!',
        }
        form = ContactForm(initial=initial_data)

    return render(request, 'contact.html', {'form': form})

def contact_success(request):
    return render(request, 'contact_success.html')

在上面的代码中,我们将 initial 数据分配给新的 ContactForm 实例,并将初始化表单字段数据,以便在渲染表单时自动填充表单字段。

注意,在 Django 中,所有公共表单字段都继承自 django.forms.fields.Field 类,而所有的表单类都继承自 django.forms.Form 类。因此,您可以通过从这些现有的字段和类派生子类来创建您自己的自定义表单数据类型。

相关文章