Django中的form_valid_redirect()函数是一个类视图中用来处理表单提交成功后的重定向操作的方法,它的作用是将表单成功提交后的重定向操作委托给Django来完成,并且确保它适用于所有的表单类视图,消除了编写单独的表单处理函数的需要。当使用这个函数时,我们可以在视图类中重载这个函数来自定义重定向的路径或者其他参数。下面是使用方法的完整攻略:
-
安装Django
因为form_valid_redirect()方法是Django框架中的一个内置方法,所以在使用它之前,你必须要安装好Django开发环境。你可以通过pip命令来安装,安装完毕后在你的Python环境中就可以引用Django模块了。 -
重载form_valid_redirect()方法
首先,在你某一个表单类视图中,需要重载form_valid_redirect()方法,然后通过super()方法来调用父类的该方法,以确保可以正确处理表单提交后的重定向操作。然后,你可以在重载后的函数中指定重定向的路径以及其他参数。
下面是一个实例,假如你有一个收件人地址表单,你希望在成功提交表单后重定向到地址列表页面,那么代码如下:
from django.shortcuts import render
from django.views import View
from django.urls import reverse_lazy
from django.views.generic.edit import FormView
from .forms import AddressForm
from .models import Address
class AddressCreateView(FormView):
template_name = 'address_create.html'
form_class = AddressForm
success_url = reverse_lazy('address_list')
def form_valid(self, form):
address = form.save(commit=False)
address.save()
return super().form_valid(form)
def form_valid_redirect(self):
return self.success_url
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['addresses'] = Address.objects.all()
return context
上面的代码中,我们假设在models.py中已经定义了Address的数据模型,通过一个表单类AddressForm将表单和模型绑定起来。当表单验证通过之后,我们通过form.save(commit=False)的方式保存数据,并且委托Django来完成表单提交后的重定向操作。
另一个实例是,如果你希望在某一个表单提交之后重定向到成功页面之后给一些提示信息,你可以使用Django的messages框架。具体代码如下:
from django.contrib import messages
from django.shortcuts import render
from django.views.generic.edit import FormView
from .forms import ContactForm
class ContactUs(FormView):
form_class = ContactForm
template_name = 'contact_form.html'
success_url = '/thanks/'
def form_valid(self, form):
form.send_email()
messages.success(self.request, 'Form submission successful')
return super().form_valid(form)
当这个表单成功提交后,它会将一个成功提示信息存放在Django中的messages框架中,然后通过success_url来进行重定向。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Django的 form_valid_redirect() 函数:返回表单验证成功后的重定向 URL - Python技术站