Django中的form_valid()函数是在使用类视图(Class-Based Views)时,用于处理表单(Form)数据的一个默认处理函数。它主要的作用是将表单的数据绑定到一个ModelForm对象上,然后利用这个对象去更新或保存数据库中的数据。
通常情况下,当用户提交表单时,我们需要对表单中的数据进行一些验证以确保数据的正确性。如果验证通过,我们需要将数据保存到数据库中。这个过程可以通过继承Django中提供的FormView视图,并重写其中的form_valid()函数,在函数中编写处理数据的逻辑来实现。
下面我们来看一个表单保存到数据库的例子:
from django.views.generic import FormView
from .models import Book
from .forms import BookForm
class BookCreateView(FormView):
template_name = 'book_create.html'
form_class = BookForm
success_url = '/book/'
def form_valid(self, form):
# 将表单的数据绑定到ModelForm对象
book_obj = form.save(commit=False)
# 获取用户输入的数据
title = form.cleaned_data['title']
author = form.cleaned_data['author']
publisher = form.cleaned_data['publisher']
# 将数据保存到数据库中
book_obj.title = title
book_obj.author = author
book_obj.publisher = publisher
book_obj.save()
return super().form_valid(form)
在上述代码中,BookCreateView是继承自FormView的一个视图。我们在视图中定义了form_class属性,它指定了要使用的表单类。而form_valid()函数则是在表单提交并且验证成功的情况下被调用,我们在函数中获取用户输入的数据,并将数据保存到数据库中。
此外,form_valid()函数还可以用来实现其他功能。下面我们来看一个例子:
class ContactUsView(FormView):
template_name = 'contact_us.html'
form_class = ContactUsForm
success_url = '/thank-you/'
def form_valid(self, form):
# 发送电子邮件
email = form.cleaned_data['email']
name = form.cleaned_data['name']
message = form.cleaned_data['message']
send_mail(
'New Contact Us Message',
'Name: {}\nEmail: {}\nMessage: {}'.format(name, email, message),
'noreply@your-site.com',
['admin@your-site.com'],
fail_silently=False,
)
# 将表单的数据绑定到ModelForm对象
contact_us_obj = form.save(commit=False)
# 将数据保存到数据库中
contact_us_obj.save()
return super().form_valid(form)
在上述代码中,我们实现了一个联系我们表单,并且在用户提交表单之后发送了一封电子邮件。在form_valid()函数中,我们使用Django内置的send_mail()函数发送了邮件,并将表单的数据保存到数据库中。这个例子展示了form_valid()函数可以实现更多的操作,不仅仅是数据的保存。