详解Django的 get_success_url() 函数:获取成功提交表单后的重定向 URL

Django的get_success_url()函数是一个类方法,定义在Django框架中的Mixin类的一个子类SuccessUrlMixin中。它的作用是获取一个请求的成功跳转网址,即用户完成某个操作后应该跳转的地址,并返回给调用它的视图函数。具体的作用及使用方法如下:

作用

在web应用的开发过程中,有许多场合需要在某个指定的操作完成后,用户被导向到另一个页面或网址。比如,用户注册成功后需要跳转到登录页面,或者成功提交表单后跳转到另外一个网址等等。在这种情况下,get_success_url()函数可以方便地获取一个跳转的网址,提高web应用的不可错过性和用户体验。

使用方法

get_success_url()函数的使用方法分为以下两个步骤:

1.编写get_success_url()函数

在编写继承SuccessUrlMixin类的视图函数时,必须重载get_success_url()函数,自定义成功后跳转的网址。例如:

from django.urls import reverse_lazy
from django.views.generic import (CreateView)

class ArticleCreateView(CreateView):
    model = Article
    fields = ['title', 'content']
    template_name = 'article_create.html'
    success_url = reverse_lazy('article:create')

    def get_success_url(self):
        return reverse_lazy('article:detail', args=(self.object.id,))

上面的代码中,get_success_url()函数返回了一条带参数的URL。参数self.object.id表示当前创建的文章的id,在后面的args参数中用来构建目标网址。

2. 调用get_success_url()函数

将自定义的get_success_url()函数加入到视图函数中,并在需要跳转的位置执行。例如:

from django.shortcuts import redirect
from django.urls import reverse_lazy
from django.views.generic.edit import CreateView
from myapp.forms import MyForm

class MyCreateView(CreateView):
    form_class = MyForm
    template_name = 'myform.html'
    success_url = reverse_lazy('myapp:home')

    def form_valid(self, form):
        form.save()
        return redirect(self.get_success_url())

上面的代码中,在form_valid()函数中调用get_success_url()函数,将返回的跳转网址以重定向的方式传回给用户浏览器。

实例说明

实例1:用户注册成功后跳转到登录页面

在用户注册成功后的处理视图函数中,调用get_success_url()函数,返回登录页面的网址。例如:

from django.contrib import messages
from django.shortcuts import redirect
from django.urls import reverse_lazy
from django.views import generic
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from django.contrib.auth import login


class RegisterView(generic.CreateView):
    form_class = UserCreationForm
    success_url = reverse_lazy('login')
    template_name = 'register.html'

    def form_valid(self, form):
        response = super().form_valid(form)
        messages.success(self.request, 'User created successfully')
        return response

    def get_success_url(self):
        return reverse_lazy('login')

上面的代码中,在用户注册成功后,如果表单验证成功,则调用get_succes_url()函数并返回了一个登录页面的网址。

实例2:提交表单后跳转到另一个页面

在表单的POST请求经过验证后,调用get_success_url()函数,并返回另一个页面的URL。例如:

from django.views.generic.edit import FormView
from django.core.mail import send_mail

class ContactFormView(FormView):
    template_name = 'contact_form.html'
    form_class = ContactForm
    success_url = 'thanks/'

    def form_valid(self, form):

        send_mail(
            'Contact Form',
             form.cleaned_data['message'],
             form.cleaned_data['email'],
             ['your-email@example.com'],
            fail_silently=False,
        )
        return super().form_valid(form)

    def get_success_url(self):
        return reverse('thanks')        

上面的代码中,在表单提交后经过验证成功,调用get_success_url()函数,并返回网址‘/thanks/’做为成功跳转的地址。

通过上述的两个实例可以看出,get_success_url()函数适用于各种需要进行指定成功后跳转网址的场合,并且十分灵活,可以根据具体的需求进行自定定义。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Django的 get_success_url() 函数:获取成功提交表单后的重定向 URL - Python技术站

(0)
上一篇 2023年3月23日
下一篇 2023年3月23日

相关文章

  • 详解Django的 get_list_or_404() 函数:获取列表,如果不存在则返回 404 错误页面

    首先需要介绍一下Django的HttpResponseNotFound和Http404异常。前者返回404状态码的空页面,后者则是直接抛出404异常。get_list_or_404()是Django框架提供的一个函数,它的作用是:根据查询条件获取一个对象列表,如果查询结果为空,则抛出Http404异常。 get_list_or_404()函数的使用方法如下:…

    Django函数大全 2023年3月23日
    00
  • 详解Django的 form_valid_message() 函数:返回表单验证成功后的消息

    Django form_valid_message()函数的作用及使用 form_valid_message() 函数是 Django 中常用的表单验证函数,用于验证 ValidateFormMixin 类中 form_valid() 成功返回时的提示信息。在提交表单并验证通过后,会通过该函数来设置成功信息,提示用户操作成功。 使用 form_valid_m…

    Django函数大全 2023年3月23日
    00
  • 详解Django的 exclude() 函数:排除查询结果

    下面是关于Django的exclude()函数的详细讲解: 1. 介绍 exclude()函数是Django查询API中的一个重要函数,其作用是从查询结果中排除满足指定条件的对象。该函数通常被用于筛选数据,并寻找不符合指定过滤条件、不需要的数据,从而提高查询效率。 exclude()函数的使用方式和filter()函数非常相似,二者都是调用模型的Manage…

    Django函数大全 2023年3月23日
    00
  • 详解Django的 order_by() 函数:对查询结果进行排序

    下面是关于Django中order_by()函数的作用、使用方法和示例的详细攻略。 1. order_by()函数的作用 order_by()函数是Django中常用的一个方法,用于对查询结果进行排序。通过该方法,可以按照指定的字段对查询结果进行升序、降序排列,从而方便地对查询结果进行控制和操作。 2. order_by()函数的使用方法 order_by(…

    Django函数大全 2023年3月23日
    00
  • 详解Django的 paginate_by() 函数:指定每页显示的数量

    下面是关于Django的paginate_by()函数的作用和使用方法的完整攻略。 作用 paginate_by()函数用于在Django中对查询结果进行分页,它可以将查询结果按照指定大小进行切分,把切分后的每一份数据作为一个页面展示给用户。该函数的作用是简化分页功能的实现过程,提高开发效率。 使用方法 paginate_by()函数是在视图类中使用的,它需…

    Django函数大全 2023年3月23日
    00
  • 详解Django的 delete() 函数:处理 DELETE 请求

    当使用Django框架开发Web应用程序时,往往会面临需要删除数据库中的数据的问题。Django提供了delete()函数来达到这个目的。下面是对delete()函数的详细解释和使用方法。 delete()函数作用 delete()函数用于从数据库中删除对象记录。它是一个QuerySet函数,可以作用于某个Model对应的QuerySet对象上。当我们调用该…

    Django函数大全 2023年3月23日
    00
  • 详解Django的 form_valid() 函数:当表单验证成功时执行的操作

    Django中form_valid()函数的作用与使用方法 在Django中,视图函数中form_valid()函数是一个非常有用的函数。该函数主要用来在表单数据验证成功后处理表单数据。 1. 作用 form_valid()函数的作用是将表单验证成功后的数据传送给视图函数中的其他函数进行处理。借助form_valid()函数,我们可以将表单数据存储到数据库中…

    Django函数大全 2023年3月23日
    00
  • 详解Django的 login() 函数:用户登录

    Django的login()函数 Django中的login()函数是用来验证用户身份的,如果验证成功,函数会返回一个HttpResponseRedirect()对象,如果验证失败,函数会返回一个HttpResponse()对象。 login()函数定义如下: from django.contrib.auth import authenticate, log…

    Django函数大全 2023年3月23日
    00
合作推广
合作推广
分享本页
返回顶部