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

  • Post category:Python

form_valid() 是 Django 中 FormView 类中用来验证表单数据的函数。它用于在表单验证通过时执行的逻辑,以及在表单验证不通过时重新显示表单并给出错误提示信息的逻辑。

以下是使用 form_valid() 的方法:

  1. FormView 类中重写它
  2. 对于视图中的表单使用 mixin: SuccessMessageMixinMessagesMixin

重写 form_valid() 方法

对于处理表单的视图类,需要添加下列代码段:

from django.urls import reverse_lazy
from django.views.generic.edit import FormView

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

  def form_valid(self, form):
    form.send_email()
    return super().form_valid(form)

在这个例子中,form_valid() 函数被用来初始化表单并利用 send_email() 函数来发送邮件。此外,重写的函数执行具体的业务逻辑,返回表单验证结果。

使用 SuccessMessageMixin

使用 SuccessMessageMixin 可以很容易地添加成功消息。例子如下:

from django.views.generic.edit import FormView
from django.contrib.messages.views import SuccessMessageMixin
from django.urls import reverse_lazy
from .forms import CustomForm

class FormSuccessMessageMixin(SuccessMessageMixin):
  success_message = "Form was submitted successfully!"

  def get_success_url(self):
    return reverse_lazy('form')

class CustomFormView(FormSuccessMessageMixin, FormView):
  form_class = CustomForm
  template_name = 'form.html'
  success_url = reverse_lazy('form')

在这个例子中,form_valid() 函数是由 SuccessMessageMixin mixin 提供的,用来处理 HTTP POST 请求,其中函数定义了表单的逻辑,而 mixin 为发送成功消息提供了指引。

另外一个使用 form_valid() 的例子是图片上传视图:

from django.shortcuts import render
from django.views.generic import FormView
from .forms import ImageForm

class ImageUpload(FormView):
  template_name = 'image_upload.html'
  form_class = ImageForm
  success_url = '/images/upload_done/'

  def form_valid(self, form):
    form.save()
    return super(ImageUpload, self).form_valid(form)

在这个例子中,文件上传表单 (ImageForm) 的数据被保存,重新定向到一个成功页面。

总而言之,form_valid() 函数是 Django 中用来处理表单的函数,在调用时表单验证通过时会执行其中的方法,也可以通过重写该函数来实现特定的业务逻辑,同时也能与一些混入类,如 SuccessMessageMixinMessagesMixin 进行配合使用。