详解Django的 form_validated() 函数:表单数据验证通过后的处理逻辑

  • Post category:Python

在Django中,form_validated()是一个用于处理表单的视图函数,它接收一个POST请求并验证其中的表单数据。如果表单验证通过,该函数将执行自定义操作,并将用户重定向到另一个URL。下面是关于form_validated()函数的详细介绍及使用方法:

1. 功能介绍

form_validated()函数的主要功能包括:

  1. 验证表单数据,确定其是否有效。
  2. 根据表单数据,执行一些自定义操作。例如,将表单数据保存到数据库中,显示成功消息等。
  3. 将用户重定向到另一个URL。当表单验证成功且自定义操作完成后,此函数将自动重定向到指定的URL。

2. 使用方法

使用form_validated()函数的步骤如下:

2.1 定义表单

首先,需要定义一个表单类。表单类必须继承Django自带的Form类,且至少包含要验证的字段。例如,下面是一个包含2个字段的表单类:

from django import forms

class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    message = forms.CharField(widget=forms.Textarea)

2.2 定义视图函数

接下来,需要定义一个视图函数来处理表单。在视图函数中,必须创建表单实例并进行验证。如果表单数据有效,则调用form_validated()函数执行自定义操作并将用户重定向到另一个URL。

下面是一个简单的示例:

from django.views.generic.edit import FormView

class ContactView(FormView):
    template_name = 'contact.html'
    form_class = ContactForm
    success_url = '/thanks/'

    def form_valid(self, form):
        # 执行自定义操作
        print(form.cleaned_data['subject'])
        print(form.cleaned_data['message'])
        # 返回HttpResponseRedirect以重定向到另一个URL
        return super().form_valid(form)

在上面的代码中,ContactView是一个基于类的视图。它指定了一个使用的模板(template_name),一个要使用的表单类(form_class),一个成功处理表单后要重定向到的URL(success_url)。

form_valid()函数负责验证表单数据。如果表单通过验证,它将被调用。此时,将执行自定义操作并重定向到另一个URL。

2.3 定义表单模板

最后,需要创建一个用于呈现表单的模板。在模板中,要使用form标签将表单实例渲染为HTML。例如,可以创建一个名为contact.html的模板:

{% extends "base.html" %}

{% block content %}
  <h1>Contact us</h1>
  <form method="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Submit</button>
  </form>
{% endblock %}

3. 示例

下面是两个示例:

3.1 将表单数据保存到数据库中

在这个例子中,我们将表单数据保存到数据库中。假设我们的ContactForm包含fields:name, email_address和message。我们将定义Chat类和ChatForm类以处理这些数据:

from django.views.generic.edit import FormView
from django.urls import reverse_lazy
from .models import Chat
from .forms import ChatForm

class ChatView(FormView):
    template_name = 'chat.html'
    form_class = ChatForm
    success_url = reverse_lazy('chat')

    def form_valid(self, form):
        # 将表单数据保存到数据库中
        chat = Chat()
        chat.name = form.cleaned_data['name']
        chat.email_address = form.cleaned_data['email_address']
        chat.message = form.cleaned_data['message']
        chat.save()
        return super().form_valid(form)

此视图的作用是将用户发表的聊天信息保存在数据库中。在上面的form_valid()方法中,我们首先从表单中提取数据,然后使用该数据创建一个新的Chat对象,并将其保存到数据库中。最后,我们将该对象返回给用户,并将其重定向到聊天页面。

3.2 发送电子邮件

在这个例子中,我们将发送电子邮件以通知管理员有新的联系请求。假设我们的ContactForm包含fields:name,email_address和message。我们将使用Django自带的邮件模块来实现这个功能:

from django.views.generic.edit import FormView
from django.urls import reverse_lazy
from django.core.mail import send_mail
from .forms import ContactForm

class ContactView(FormView):
    template_name = 'contact.html'
    form_class = ContactForm
    success_url = reverse_lazy('contact')

    def form_valid(self, form):
        # 发送电子邮件通知管理员有新的联系请求
        send_mail(
            'New contact request',
            'Name: {}\nEmail: {}\nMessage: {}'.format(
                form.cleaned_data['name'],
                form.cleaned_data['email_address'],
                form.cleaned_data['message']
            ),
            'admin@example.com',
            ['admin@example.com'],
            fail_silently=False,
        )
        return super().form_valid(form)

此视图的作用是发送电子邮件以通知管理员有新的联系请求。在上面的form_valid()方法中,我们从表单中提取数据,并使用Django自带的send_mail()方法发送邮件。最后,我们将该对象返回给用户,并将其重定向到联系页面。

4. 总结

以上就是关于Django中form_validated()函数的说明及使用方法的完整攻略。可以通过form_valid()方法执行自定义操作,并将用户重定向到另一个URL。可以使用本文提供的两个实例来了解如何使用该函数。