form_valid()
是 Django 中 FormView
类中用来验证表单数据的函数。它用于在表单验证通过时执行的逻辑,以及在表单验证不通过时重新显示表单并给出错误提示信息的逻辑。
以下是使用 form_valid()
的方法:
- 在
FormView
类中重写它 - 对于视图中的表单使用 mixin:
SuccessMessageMixin
或MessagesMixin
重写 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 中用来处理表单的函数,在调用时表单验证通过时会执行其中的方法,也可以通过重写该函数来实现特定的业务逻辑,同时也能与一些混入类,如 SuccessMessageMixin
和 MessagesMixin
进行配合使用。