关键词

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

Django的get_failure_url()函数

get_failure_url() 是 Django 中的一个负责处理表单验证失败后返回的 URL 的函数,它允许开发人员定义表单验证失败后的重定向地址。

作用

  • 当一个表单被提交,但是表单验证失败时,get_failure_url() 函数会被调用。
  • 当检测到表单验证失败时,Django 框架自动重定向到此函数所返回的 URL。

使用方法

开发人员需要在目标视图中实现 get_failure_url() 的功能。

示例代码:

from django.urls import reverse_lazy
from django.views.generic.edit import FormView
from .forms import MyForm

class MyFormView(FormView):
    template_name = 'my_form.html'
    form_class = MyForm
    success_url = reverse_lazy('success_view')

    def form_valid(self, form):
        # 处理表单提交逻辑
        return super().form_valid(form)

    def form_invalid(self, form):
        # 表单验证失败时执行该方法
        return self.render_to_response(self.get_context_data(form=form, failure_url=self.get_failure_url()))

    def get_failure_url(self):
        return reverse_lazy('failure_view')

在 示例代码中,覆盖 FormView.form_invalid() 方法,并使用 get_context_data() 方法将该方法返回的东西传递到模板。 在模板中,该 URL 可以用于将表单返回到用户。

实例演示

示例 1

假设我们有一个联系表单,我们想要在提交表单之后重定向到成功页面或失败页面,具体视情况而定。

例如,我们可以在提交表单成功后重定向到 '/contact/thanks/' 的 URL,或者在提交表单失败后重定向到 '/contact/error/' 的 URL。

为了处理这一需求,我们可以修改视图代码,添加 get_failure_url() 方法:

from django.shortcuts import render
from django.core.mail import send_mail
from django.conf import settings
from django.views.generic.edit import FormView

from .forms import ContactForm

class ContactFormView(FormView):
    form_class = ContactForm
    template_name = 'contact.html'

    def form_valid(self, form):
        recipient_list = getattr(settings, "MANAGERS_EMAIL", [])
        subject = form.cleaned_data['subject']
        message = form.cleaned_data['message']
        email_from = form.cleaned_data['email_from']
        send_mail(subject, message, email_from, recipient_list, fail_silently=False)
        return super().form_valid(form)

    def get_success_url(self):
        return '/contact/thanks/'

    def get_failure_url(self):
        return '/contact/error/'

在实现代码中,我们覆盖了 FormView.get_failure_url() 方法并返回了错误重定向地址 '/contact/error/' 确保用户可以知道他们在哪里犯错,并重新输入相关表单信息。

示例 2

假设我们有一个注册表单,我们想要在出现错误时重定向到同一页面,以提供更易于使用的体验。

示例代码:

from django.shortcuts import redirect
from django.views.generic.edit import FormView
from .forms import RegistrationForm

class RegistrationView(FormView):
    form_class = RegistrationForm
    template_name = 'register.html'
    success_url = '/account/'

    def form_valid(self, form):
        form.save()
        return super().form_valid(form)

    def form_invalid(self, form):
        return redirect('register')

在实现的代码中,我们覆盖 FormView.form_invalid() 方法,并重定向到同一页,以便用户可以再次尝试提交内容。

以上是关于Django的get_failure_url()函数的作用与使用方法的完整攻略,希望对你有所帮助。

本文链接:http://task.lmcjl.com/news/16249.html

展开阅读全文