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

  • Post category:Python

get_success_url() 函数是指重定向到成功的URL。在Django框架中,由于在处理表单提交中,我们往往需要在表单提交成功后,跳转到一个指定的页面,这时候就需要 get_success_url() 函数来完成重定向操作。

简单来说, get_success_url() 函数作用就是在表单提交成功后,自动跳转到指定的成功页面。

使用方法:
– 首先在 Django 中创建视图类时,需要先继承基类 View 或者 FormView,接下来再实现 get_success_url() 函数,以及表单处理的 handle() 函数。

  • handle() 函数里面添加表单处理逻辑,并在表单提交成功后,调用 get_success_url() 函数,就可以完成跳转操作。

  • 在get_success_url() 函数中设置成功跳转的URL,可以是一个静态的URL,也可以是一个动态生成的URL。

  • 最后,在Django的urls.py文件中,通过url()函数 把视图类和URL绑定在一起,这样当用户访问相应的URL时,该视图类就会被自动调用处理。

举两个例子来说明 get_success_url() 函数的使用:

例1: 假设我们的Django项目中有一个注册页面,我们需要在注册成功后自动跳转到登录页面。为了实现这一功能,我们需要定义一个注册表单视图类,实现 get_success_url() 函数。

from django.views.generic.edit import FormView
from django.contrib.auth.forms import UserCreationForm
from django.urls import reverse_lazy

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

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

在这个例子中,我们定义了一个 RegisterView 类,这是一个基于表单的视图类,继承 Django 的 FormView 类,用于处理用户注册表单。具体实现中,我们给模板文件指定了 register.html,表单类为 UserCreationForm,设置了跳转成功的URL为 ‘login’, 而在用户提交表单后,在 form_valid() 函数中完成表单数据的保存,并调用 get_success_url() 函数,自动跳转到登录页面。

例2

假设我们需要实现这样一个需求:当用户创建了一个文章,并成功保存到数据库后,自动跳转到该文章详情页面。那么我们需要在创建 ArticleView 视图类中,实现 get_success_url() 函数,如下所示:

from django.views.generic.edit import CreateView
from myapp.models import Article
from django.urls import reverse_lazy

class ArticleView(CreateView):
    template_name = 'article_add.html'
    model = Article
    fields = [
        'title', 
        'content',
    ]

    def get_success_url(self):
        return reverse_lazy('article-detail', kwargs={'pk': self.object.pk})

这个例子中,我们定义创建 ArticleView 视图类,这是一个基于Model的视图类,继承 Django 的 CreateView 类。在具体实现中,我们给模板文件指定了 article_add.html,指定 model 为 Article,设置了需要用到的字段以及对应的表单控件。而在定义 get_success_url() 函数中,我们生成了一个动态的URL,通过 reverse_lazy() 函数生成,该URL包含了当前创建文章的ID,使用 kwargs 的方式把文章ID传递到URL中,最后完成保存并跳转的操作。

这就是对 get_success_url() 函数的详细说明和使用方法攻略,通过理解和实践,可以让大家更好地掌握 Django 开发中的表单处理和页面跳转能力。