详解Django的 get_failure_url() 函数:获取表单处理失败后的跳转 URL

  • Post category:Python

get_failure_url()是Django框架中的一个函数,在视图中用于指定当表单校验失败时应该跳转到哪个页面。

具体来说,当用户在提交表单时出现错误,例如表单字段的数据类型错误、未填写必要的字段等,Django将返回一个HTTP 400错误(Bad Request)。这时Django就会根据当前视图中实现的get_failure_url()方法来决定跳转到哪一个页面,通常是回到之前的表单页面或者是某个默认的错误提示页面。

使用方法如下:

  1. 在视图中重写get_failure_url()方法:
from django.urls import reverse_lazy
from django.views.generic.edit import FormView
from myapp.forms import MyForm

class MyFormView(FormView):
    form_class = MyForm # 定义MyForm作为本视图序列化的form
    success_url = reverse_lazy('success') # 定义当form提交成功后,应该跳转到哪个URL
    template_name = 'my_template.html' # 定义使用的模板

    def form_valid(self, form):
        """
        form验证成功,跳转到success_url。(success_url选项是必须的)
        """
        return super(MyFormView, self).form_valid(form)

    def form_invalid(self, form):
        """
        form验证失败,跳转到此函数所返回的get_failure_url()方法指定的url。(get_failure_url()选项是必须的)
        """
        return super(MyFormView, self).form_invalid(form)

    def get_failure_url(self):
        """
        如果表单数据校验失败,返回到当前表单所在的页面
        """
        return self.request.path
  1. 使用get_failure_url()函数实现具体的跳转:
class MyExceptionView(View):
    def get(self, request):
        try:
            # some codes here
        except SomeException:
            return self.get_failure_url()

    def get_failure_url(self):
        """
        发生异常时,跳转到/home/页面
        """
        return reverse_lazy('home')

需要注意的是,get_failure_url()方法必须在form_invalid()或者form_valid()方法中被调用。实际开发中,可以根据具体的场景灵活运用get_failure_url()函数,提高用户体验并提供更详尽的错误提示信息。