form_valid_redirect()
函数是Django框架中FormMixin
类提供的一个重要方法,它用于在表单提交成功后完成重定向操作。该方法将在验证和保存表单数据成功后调用,而不是将请求处理到form_valid()
方法中,所以允许你更灵活地控制重定向操作的逻辑。
该方法可以接收一个参数self
,它代表当前正在处理的视图对象。除此之外,还可以接收form
表单对象,并返回一个HttpResponseRedirect
重定向对象进行重定向。
具体使用方法如下:
- 定义视图类,继承
CreateView
或者UpdateView
等内置视图类,并在类中引入FormMixin
类。
例如,创建一个新的表单填写页面:
from django.views.generic.edit import CreateView, FormMixin
from .forms import MyForm
class MyFormView(CreateView, FormMixin):
form_class = MyForm
...
在以上代码中,我们引用了我们自定义的表单类MyForm,并将其赋值给视图类中的form_class
属性。
- 实现
form_valid_redirect()
方法
def form_valid_redirect(self, form):
# 获取表单数据
data = form.cleaned_data
# 利用表单数据完成操作(插入数据、发送邮件等)
...
# 完成处理后,实现重定向逻辑
return super(MyFormView, self).form_valid_redirect(form)
在以上代码中,我们获取到了表单数据data
,可以对其进行相应的操作后进行重定向。需要注意的是,由于我们在视图类中引入了FormMixin
类,因此可以调用super()
方法实现父类的form_valid_redirect()
方法,所以我们不需要在重写该方法时重新编写重定向逻辑。
以下是两个实例:
- 根据表单输入完成数据插入和跳转
class MyFormView(CreateView, FormMixin):
form_class = MyForm
template_name = 'my_form.html'
success_url = '/thanks/'
def form_valid_redirect(self, form):
# 获取表单数据
instance = form.save(commit=False)
# 完成操作:数据插入
instance.save()
# 完成操作后进行重定向
return super().form_valid_redirect(form)
在以上代码中,我们首先在视图类中定义了一个success_url
属性,指定表单成功提交后的重定向地址。然后,在实现form_valid_redirect()
方法时,我们首先利用form.save(commit=False)
方法获取到表单数据,然后对其进行操作,如将数据插入到数据库中。最后,我们通过调用父类的form_valid_redirect()
方法并传递form
表单对象来实现重定向。
- 根据表单输入数据获取指定的页面并跳转
class MyFormView(CreateView, FormMixin):
form_class = MyForm
template_name = 'my_form.html'
def form_valid_redirect(self, form):
# 获取表单数据
data = form.cleaned_data
# 完成操作:页面获取和跳转
return HttpResponseRedirect('/page/{}'.format(data['page_name']))
在以上代码中,我们在实现form_valid_redirect()
方法时,首先利用form.cleaned_data
方法获取到表单数据。然后,我们根据表单输入的page_name
参数值,拼接出要跳转的页面地址/page/{}'.format(data['page_name'])
。最后,我们利用HttpResponseRedirect()
方法来跳转到指定的页面。