form_valid_message()
是Django中FormView
类中的一个方法,用于在表单提交成功后显示的成功消息。这个方法返回一个字符串,将在重定向后显示给用户。在这个方法中,可以使用self.object
引用表单中已成功保存到数据库的对象。如果表单未实例化,将返回None
。下面是使用方法详解与实例说明:
使用方法
1. 编写form_valid_message()
方法
在使用FormView
视图类时,可以自定义form_valid_message()
方法以根据需要自定义成功消息。比如,你想要在成功提交之后直接进行重定向,则可以使用以下自定义消息:
class MyFormView(FormView):
# ...
def form_valid_message(self):
return "您的评论已成功提交!"
如果某个表单需要将已保存对象的名称包括在成功消息中,则可以使用以下自定义消息:
class CommentCreateView(CreateView):
# ...
def form_valid_message(self):
return f"您的评论 \"{self.object.content}\" 已成功提交!"
2. 设置成功消息
在FormView
视图中,默认情况下,成功消息将以form_valid_message()
方法的返回值为基础。如果您需要设置自己的成功消息,可以将success_url
属性设置为包含success_message
参数的URL。
比如,当用户成功提交表单后,跳转到成功页面并显示消息,则可以这样设置:
class MyFormView(FormView):
# ...
success_url = reverse_lazy('success')
def form_valid(self, form):
# ...
return super().form_valid(form)
def get_success_url(self):
return f"{super().get_success_url()}?success_message={self.form_valid_message()}"
reverse_lazy
是Django中包含URL名称的反向解析函数,它将URL名称作为参数,并将其转换为URL路径。get_success_url()
方法返回一个URL,这个URL包括了success_message
参数,该参数值是form_valid_message()
方法返回的字符串。
3. 在模板中显示成功消息
最后,在模板中,可以使用django.contrib.messages
来显示成功消息。下面是一个简单的HTML模板:
{% extends 'base.html' %}
{% block content %}
<div class="alert alert-success">
{{ success_message }}
</div>
{% endblock %}
可以看到,我们使用了success_message
变量来显示成功消息,这个变量实际上就是从URL中获取的success_message
参数。如果该参数不存在,则显示为空字符串。
实例说明
实例1:表单提交成功后自动跳转并显示成功信息
假设有一个“Feedback”表单,用户可以输入反馈信息并提交。当用户成功提交反馈信息后,需要自动跳转到成功页面,并显示一个成功消息。
以下是相关的代码:
from django.urls import reverse_lazy
from django.views.generic.edit import FormView
from django.contrib import messages
from .forms import FeedbackForm
class FeedbackView(FormView):
form_class = FeedbackForm
success_url = reverse_lazy('feedback_success')
template_name = 'feedback.html'
def form_valid(self, form):
form.save()
messages.success(self.request, self.form_valid_message())
return super().form_valid(form)
def form_invalid(self, form):
messages.error(self.request, '提交出错,请重试')
return super().form_invalid(form)
def form_valid_message(self):
return "您的反馈信息已成功提交!"
在这个例子中,我们使用了messages
模块向页面上下文添加消息,在模板中使用{% messages %}
标签显示。在form_valid()
方法中,当成功提交时,使用messages.success()
方法将成功消息添加到页面上下文中。同时,在form_invalid()
中,如果表单验证失败,则使用messages.error()
方法。form_valid_message()
方法返回反馈成功时要显示的消息。
实例2:表单提交成功后返回一个包含成功消息的JSON响应
假设有一个”Subscription”表单,用户在其中输入姓名和邮箱地址。当用户成功提交信息后,需要返回一个JSON响应,将记录添加到数据库中,并包含成功消息。
以下是相关的代码:
from django.views.generic.edit import CreateView
from django.http import JsonResponse
from .forms import SubscriptionForm
class SubscriptionCreateView(CreateView):
model = Subscription
form_class = SubscriptionForm
def form_valid(self, form):
response = super().form_valid(form)
return JsonResponse({
'success': True,
'message': self.form_valid_message(),
'object': {
'id': self.object.id,
'name': self.object.name,
'email': self.object.email,
}
})
def form_invalid(self, form):
response = super().form_invalid(form)
return JsonResponse({
'success': False,
'errors': form.errors,
})
def form_valid_message(self):
return "您已成功订阅我们的邮件服务。感谢您的支持!"
在这个例子中,我们使用JsonResponse
类在表单成功提交时返回一个JSON响应。在form_valid()
方法中,我们返回一个包含成功消息和新添加的对象的JSON响应。在form_invalid()
方法中,我们返回一个包含错误的JSON响应。form_valid_message()
方法返回要在JSON响应中包含的成功消息字符串。