详解Django的 form_valid_message() 函数:返回表单验证成功后的消息

  • Post category:Python

下面是关于Django的form_valid_message()函数的详细讲解:

作用

form_valid_message()函数是Django框架中的一个方法,作用是在表单成功验证并被认为是有效时,返回自定义的成功信息。

在Django中,自定义成功信息是一种很常见的需求。往往我们需要根据具体业务需求,来显示用户提交表单成功之后的提示信息。Django提供了form_valid_message()函数的方式来实现自定义提示信息。

使用方法

我们可以在视图类中使用form_valid_message(),方法如下:

# 在views.py中,定义视图类
from django.contrib.messages.views import SuccessMessageMixin
from django.views.generic.edit import CreateView

class ArticleCreateView(SuccessMessageMixin, CreateView):
    model = Article
    fields = ['title', 'content', 'author']
    success_url = '/articles/'
    success_message = "Your article '%(title)s' was created successfully."

    def form_valid(self, form):
        form.instance.user = self.request.user
        return super().form_valid(form)

    def form_invalid(self, form):
        messages.error(self.request, 'There was an error creating your article.')
        return super().form_invalid(form)

    # 定义form_valid_message()函数,返回成功消息
    def form_valid_message(self):
        success_message = "Your article '%(title)s' was created successfully."
        return success_message % {'title': self.object.title}

我们可以将SuccessMessageMixin作为基类,并设置success_message属性为一个字符串,这将使Django自动显示表单提交成功后的提示消息,而不需要我们单独处理消息的显示逻辑。

此外,我们可以在视图类中定义form_valid_message()函数,来自定义成功信息,其更精细的控制方式使得我们可以为每个表单字段和页面元素提供不同的成功信息。

实例说明

假设你正在开发一个博客网站,你可以使用form_valid_message()来定制一个成功信息。具体实现如下:

实例1:创建文章成功

我们在创建文章时,能够显示消息:“您的文章已成功发布!”

# 在views.py中,定义视图类
from django.contrib.messages.views import SuccessMessageMixin
from django.views.generic.edit import CreateView

class ArticleCreateView(SuccessMessageMixin, CreateView):
    model = Article
    fields = ['title', 'content', 'author']
    success_url = '/articles/'
    success_message = "您的文章已成功发布!"

    def form_valid(self, form):
        form.instance.user = self.request.user
        return super().form_valid(form)

    def form_invalid(self, form):
        messages.error(self.request, '文章发布失败,请稍后再试。')
        return super().form_invalid(form)

    # 定义form_valid_message()函数,返回成功消息
    def form_valid_message(self):
        return "您的文章 '%(title)s' 已成功发布!" % {'title': self.object.title}

这里我们使用了SuccessMessageMixin,并且设置视图属性success_message为我们想要展示的默认成功消息。在form_valid_message()中,我们直接返回了成功消息,并使用字符串插值将文章标题插入其中,以便在消息中显示。

实例2:评论成功

我们在创建评论时,能够显示消息:“您的评论已成功提交!”

# 在views.py中,定义视图类
from django.contrib.messages.views import SuccessMessageMixin
from django.views.generic.edit import CreateView

class CommentCreateView(SuccessMessageMixin, CreateView):
    model = Comment
    fields = ['content']
    success_url = '/articles/'
    success_message = "您的评论已成功提交!"

    def form_valid(self, form):
        article_id = self.kwargs['article_id']
        form.instance.article = Article.objects.get(pk=article_id)
        form.instance.user = self.request.user
        return super().form_valid(form)

    def form_invalid(self, form):
        messages.error(self.request, '评论提交失败,请稍后再试。')
        return super().form_invalid(form)

    # 定义form_valid_message()函数,返回成功消息
    def form_valid_message(self):
        return "您的评论已成功提交!"

这里我们同样使用了SuccessMessageMixin,并且在success_message属性中设置了默认的成功消息。在form_valid_message()中,我们直接返回了成功消息,因为评论表单中没有文章标题等字段和关联的页面元素,所以直接使用默认消息即可。

以上就是Django的form_valid_message()函数的作用与使用方法的完整攻略。