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

  • Post category:Python

Django中的get_success_url()函数用于获取表单提交成功后重定向的URL地址。通过重定向,可以使用户在表单提交后跳转到其他页面,比如返回到之前的页面、跳转到展示提交结果的页面等。get_success_url()函数的使用非常灵活,可以自定义重定向的URL地址,也可以根据表单字段的值或其他条件动态生成URL。

使用方法

get_success_url()函数的使用需要在视图类中定义。首先在视图类中定义success_url属性,用于获取表单提交成功后重定向的默认URL地址。当表单提交成功后,如果没有通过get_success_url()函数设置具体的URL地址,则使用success_url属性指定的地址。可以在类中直接定义success_url属性,也可以通过一个函数来动态获取。示例代码如下:

from django.views.generic.edit import CreateView

class MyCreateView(CreateView):
    model = MyModel
    success_url = '/my/success/url/'
    fields = ['field1', 'field2', 'field3']

    def form_valid(self, form):
        response = super(MyCreateView, self).form_valid(form)
        # do something
        return response

    def get_success_url(self):
        return self.kwargs['success_url']

在上面的代码中,CreateView是用于创建新数据的视图类。MyModel是需要创建的模型类,fields指定表单中需要填写的字段。success_url属性指定表单提交成功后需要重定向的默认URL地址。form_valid()是用于处理表单提交的方法,这里简单的调用了父类的方法,但是可以在这个方法中进行其他一些操作,比如发送邮件、通知其他系统等。最后,get_success_url()是用于获取重定向URL的方法,这里通过self.kwargs[‘success_url’]获取动态生成的URL。

示例

  1. 自定义重定向URL地址
from django.views.generic.edit import CreateView

class MyCreateView(CreateView):
    model = MyModel
    fields = ['field1', 'field2', 'field3']

    def form_valid(self, form):
        response = super(MyCreateView, self).form_valid(form)
        # do something
        return response

    def get_success_url(self):
        return '/my/success/url/'

在这个示例中,get_success_url()函数返回了一个固定的URL地址,即’/my/success/url/’。无论表单中填写的数据是什么,提交成功后都会重定向到这个地址。

  1. 根据表单字段生成重定向URL
from django.views.generic.edit import CreateView

class MyCreateView(CreateView):
    model = MyModel
    fields = ['field1', 'field2', 'field3']

    def form_valid(self, form):
        response = super(MyCreateView, self).form_valid(form)
        # do something
        return response

    def get_success_url(self):
        obj = self.object
        return f'/my/{obj.field1}/{obj.field2}/success/url/'

在这个示例中,get_success_url()函数根据表单字段生成重定向URL,地址包含了表单中field1和field2字段的值。在这种情况下,每次提交成功后都会跳转到不同的URL地址,URL地址的生成规则可以通过跟进实际需求进行扩展。