详解Django的 get_success_message() 函数:获取表单验证成功后的消息

  • Post category:Python

get_success_message()是Django框架中一个非常有用的方法,它可以让开发者在进行某些特定操作后,向用户展示一个自定义的成功消息。

具体来说,get_success_message()方法在view中的作用就是获取默认逻辑执行成功以后需要显示的成功消息。需要注意的是,此方法只有在重定向返回页面的时候才有效。

下面是get_success_message()方法的一般使用方法:

from django.contrib.messages.views import SuccessMessageMixin
from django.views.generic.edit import CreateView, UpdateView
from django.urls import reverse_lazy

class MyCreateView(SuccessMessageMixin, CreateView):
    model = MyModel
    fields = ['field1', 'field2']
    success_url = reverse_lazy('my_list_view')
    success_message = 'Record successfully created.'

class MyUpdateView(SuccessMessageMixin, UpdateView):
    model = MyModel
    fields = ['field1', 'field2']
    success_url = reverse_lazy('my_list_view')
    success_message = 'Record successfully updated.'

    def get_success_message(self, cleaned_data):
        return self.success_message % dict(cleaned_data, slug=self.object.slug)

在这个例子中,我们定义了MyCreateView和MyUpdateView两个视图。这两个视图都继承自Django的SuccessMessageMixin类。这个类中定义的success_message属性定义了当用户成功创建或更新一个数据库中的对象时,需要向用户展示的消息。

具体来说,我们首先要在view中设置success_message属性,在默认情况下就可以在DB对象创建或更新成功后将消息传给消息框架并保存到数据库中。如果你想使用一些特殊的数据展示这个消息,你需要覆盖get_success_message方法并提供自己的逻辑。

例如,假设我们有一个模型MyModel,它具有slug和name这两个字段。现在我们想向用户显示一个消息,该消息包含MyModel的name和slug字段。我们可以按以下方式打印成功消息:

class MyUpdateView(SuccessMessageMixin, UpdateView):
    model = MyModel
    fields = ['field1', 'field2']
    success_url = reverse_lazy('my_list_view')
    success_message = 'Record successfully updated. Name: %(name)s, slug: %(slug)s'

    def get_success_message(self, cleaned_data):
        return self.success_message % dict(cleaned_data, slug=self.object.slug)

以上实例中’SuccessMessageMixin’实现了当用户成功完成对象的创建、更新、删除等操作时,可以向其展示一个自定义的消息。视图类只需要设置’success_message’属性,Django框架就会自动将消息传递给消息框架并保存到数据库中。

另一个例子是,假如我们有一个用户编辑资料的表单,用户可以填写用户名、邮箱和密码等信息。当用户成功更新自己的信息时,我们想向他们展示一个成功消息,并在成功消息中包含他们的用户名。这时候我们就可以这样做:

from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic.edit import UpdateView
from django.urls import reverse_lazy

class ProfileUpdateView(LoginRequiredMixin, SuccessMessageMixin, UpdateView):
    model = User
    fields = ['username', 'email', 'password']
    template_name_suffix = '_update_form'
    success_url = reverse_lazy('profile_detail')
    success_message = 'Profile for %(username)s was updated successfully'

    def get_success_message(self, cleaned_data):
        return self.success_message % dict(cleaned_data, username=self.object.username)

在这个例子中,我们首先定义了一个ProfileUpdateView视图。当用户成功更新他们的资料时,我们使用get_success_message()方法返回一条名为’SuccessMessageMixin’的成功消息,其中包含用户的用户名和一个自定义消息。视图的成功消息通过success_message属性设置。

以上两个实例都展示了如何使用get_success_message()方法来自定义成功消息。我们可以根据具体情况,使用不同的参数和逻辑来构建自己的成功消息。