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

yizhihongxing

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的 create() 函数:创建对象

    当使用Django ORM作为后端数据库操作模块时,create()函数提供了方便的功能能够快速创建并保存一个模型实例。下面将详细讲解create()函数的作用和使用方法,同时提供两个实例进行说明。 作用 create()函数的作用是创建一个新的模型实例,并将其保存至数据库中。 使用方法 create()函数是一个类方法,可以在模型类上直接调用,使用方式如下…

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

    下面是Django的annotate()函数的作用与使用方法的完整攻略: 1. annotate()函数的作用 annotate()函数是Django的Model API中的一个高级查询函数,它的作用是对查询结果进行注解、统计和计算,并将这些结果添加到查询结果的每个对象中。可以理解为给查询结果增加一个字段,这个字段的值是统计、注解和计算后的结果。 2. an…

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

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

    Django函数大全 2023年3月23日
    00
  • 详解Django的 redirect() 函数:重定向到指定的 URL

    下面给您详细讲解Django的redirect()函数的作用与使用方法的完整攻略。 1. redirect()函数概览 redirect()函数属于Django的快捷函数之一,主要作用是重定向到指定的视图函数或URL。其函数定义如下: def redirect(to, permanent=False, *args, **kwargs): "&quo…

    Django函数大全 2023年3月23日
    00
  • 详解Django的 get_meta_keywords() 函数:获取页面的关键词

    Django的get_meta_keywords()函数介绍 在Django开发中,我们经常需要使用get_meta_keywords()函数来处理Meta关键词信息。get_meta_keywords()函数是Django框架中提供的一个工具函数,可以将传入的字符串参数进行处理,生成Meta关键字信息。Meta关键字信息通常用于描述Web页面的内容特征,便…

    Django函数大全 2023年3月23日
    00
  • 详解Django的 get_paginator() 函数:获取分页器

    Django中get_paginator()函数的作用与使用方法 1. get_paginator()函数的作用 Django中的get_paginator()函数是用来进行分页的工具,通过将一系列需要分页的数据传递到该函数中,可以返回一个Paginator对象,该对象包含了分页后的数据以及分页的相关信息,例如总页数、当前页码等。get_paginator(…

    Django函数大全 2023年3月23日
    00
  • 详解Django的 get_page_title() 函数:获取页面标题

    Django的get_page_title()函数使用方法及作用 Django的get_page_title()函数是一个用于生成页面标题的辅助函数,它通常用于管理网站的不同页面的标题显示。该函数可以根据传入的不同参数生成不同的标题。 使用方法: 在Django的视图函数中调用get_page_title()函数时,需要将页面标题作为参数传递到函数中。可以传…

    Django函数大全 2023年3月23日
    00
  • 详解Django的 get_context_data() 函数:获取模板上下文数据

    Django的get_context_data()函数是一个用于返回视图的上下文数据的方法。可以通过这个方法将需要展示的数据传递到模板中,从而方便渲染模板。下面提供一份完整攻略。 1. get_context_data() 函数的作用 get_context_data() 函数的作用是在视图中从数据库或其它数据源中取得一些需要展示的数据,然后将这些数据回传给…

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