详解Django的 form_valid() 函数:当表单验证成功时执行的操作

  • Post category:Python

form_valid()函数是Django视图函数中针对表单提交的视图函数中的一个方法,具体负责处理表单提交并验证数据的正确性。该函数的作用是对提交的表单数据进行校验并对表单数据进行处理,如果表单数据的校验通过则执行视图函数执行需要处理的逻辑,而如果校验失败则返回表单错误信息。

下面是form_valid()方法的基本语法以及参数:

def form_valid(self, form):
    # 处理表单数据并返回结果

form_valid()方法中的form参数是一个Django表单实例,用于对提交数据进行校验。下面提供两个例子说明form_valid()方法的使用方法:

例子1:创建新的数据记录

假设我们有一个博客应用,我们需要编写一个视图函数用于创建新的博客文章。在编写该视图函数时,我们需要使用Django的CreateView视图类以及指定的模型表单类。

下面是使用CreateViewModelForm类的示例代码:

from django.views.generic import CreateView
from .models import BlogPost
from .forms import BlogPostForm

class CreateBlogPostView(CreateView):
    model = BlogPost
    form_class = BlogPostForm
    template_name = "blog/create_post.html"

    def form_valid(self, form):
        post = form.save(commit=False)
        post.author = self.request.user  # 添加作者,关联当前登录用户
        post.save()
        return super().form_valid(form)

在上面的代码中,我们首先定义了一个CreateBlogPostView类,该类继承自CreateView,用于处理请求并创建新的BlogPost模型对象。然后我们指定了模型类BlogPost以及BlogPostForm表单类。在form_valid()方法中,我们首先使用commit=False参数来保存模型之前先创建模型实例,然后利用request.user获取当前登录用户,并将其作为新增博客文章的作者。最后,我们返回super().form_valid(form)以继续执行视图函数需要的其他逻辑。

例子2:修改数据记录

下面是另一个示例代码,该代码与上一个示例类似,但是用于修改现有记录,而不是创建新记录。

from django.views.generic import UpdateView
from .models import BlogPost
from .forms import BlogPostForm

class UpdateBlogPostView(UpdateView):
    model = BlogPost
    form_class = BlogPostForm
    template_name = "blog/update_post.html"

    def form_valid(self, form):
        post = form.save(commit=False) # 先创建post并且不保存到数据库
        if post.author != self.request.user: # 判断是否为该用户发表的博客
            return HttpResponseForbidden()
        post.save()
        return super().form_valid(form)

在上面的代码中,我们定义了一个UpdateBlogPostView类用于处理修改特定博客的请求。与CreateBlogPostView类似,我们使用UpdateViewBlogPostForm类来完成表单的校验和处理。在form_valid()方法中,我们保存了一个BlogPost对象,并且比较修改者(即当前登录的用户)是否为该博客的作者,如果不是则返回HttpResponseForbidden()。最后,我们返回super().form_valid(form)以继续执行视图函数需要的其他逻辑。

以上就是Django中form_valid()的作用和用法攻略。