form_valid_redirect()
函数是 Django 中用于表单提交成功后跳转的功能函数。该函数默认实现是在表单验证通过且 form_valid()
函数返回一个 HTTP 重定向时被调用。form_valid_redirect()
函数会在表单提交成功后自动跳转到指定的页面。
form_valid_redirect()
函数有三个参数 url
、permanent
和 query_string
,下面是每个参数的解释:
url
:必填参数,跳转的路径;permanent
:默认为False
,如果设为True
则表示为永久跳转;query_string
:默认为False
,如果设为True
则重定向的同时也会带上当前请求的查询参数。
使用方法:
在一个类视图中,如果表单验证成功后需要跳转到一个指定的页面,我们可以通过继承 FormView
并覆盖 form_valid()
函数来实现:
from django.views.generic import FormView
class MyFormView(FormView):
form_class = MyForm
template_name = 'my_form.html'
success_url = '/success/'
def form_valid(self, form):
# 如果表单验证通过,将会执行跳转操作
return self.form_valid_redirect(self.get_success_url())
通过 form_valid_redirect()
函数实现自定义成功的跳转路径在使用中非常方便,下面给出两个实例:
实例1:
我们需要在表单提交成功后跳转到新建文章的页面,可以这样实现:
from django.views.generic import FormView
from django.urls import reverse_lazy
class ArticleCreateView(FormView):
form_class = ArticleCreateForm
template_name = 'article_create.html'
def form_valid(self, form):
form.save()
url = reverse_lazy('article:detail', kwargs={'pk': form.instance.pk})
return self.form_valid_redirect(url)
在表单提交成功后,我们将表单的数据保存,并使用 reverse_lazy()
生成一个跳转的 URL,最后使用 form_valid_redirect()
函数实现跳转操作,代码非常简洁。
实例2:
我们需要在表单提交成功后更新某个对象并跳转到另一个页面,可以这样实现:
from django.views.generic import UpdateView
from django.urls import reverse_lazy
class ArticleUpdateView(UpdateView):
model = Article
fields = ['title', 'content']
template_name = 'article_update.html'
def form_valid(self, form):
form.save()
url = reverse_lazy('article:detail', kwargs={'pk': self.object.pk})
return self.form_valid_redirect(url)
在被更新对象的表单提交成功后,我们同样将表单的数据进行保存,并使用 reverse_lazy()
生成一个跳转的 URL,最后使用 form_valid_redirect()
函数实现跳转操作,这是 Django 中更新对象非常常见的实践方式。