详解Django的 form_valid_redirect() 函数:返回表单验证成功后的重定向 URL

  • Post category:Python

form_valid_redirect() 函数是 Django 中的类视图(class-based views)中的一个方法,用于在表单验证成功后重定向到指定的页面。该函数的具体作用是将表单验证成功后的请求重定向到某个指定的页面。在大多数情况下,我们需要在表单验证成功后将请求重定向到一个新页面,以显示成功消息或重定向到一个相关的页面。

以下是 form_valid_redirect() 函数的具体使用方法:

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

class MyFormView(FormView):
    template_name = 'mytemplate.html'
    form_class = MyForm
    model = MyModel

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.author = self.request.user
        self.object.save()
        return super().form_valid(form)

    def form_valid_redirect(self):
        return reverse_lazy('myapp:success')

在这个例子中,我们定义了一个名为 MyFormView 的视图类,它是一个表单视图类。MyForm 是一个定义了多个表单字段的表单对象,MyModel 是一个定义了与表单对应的模型对象。form_valid() 方法对表单做了简单的验证,使用 Form.save() 方法来保存数据,并返回成功后的默认HTTP重定向,而 form_valid_redirect() 方法定义了重定向的URL。在本例中,重定向URL名为 myapp:success,其会引导用户到成功页面。

下面是另一个使用 form_valid_redirect() 方法的例子:

from django.urls import reverse_lazy
from django.views.generic.edit import CreateView
from .forms import MyForm
from .models import MyModel

class MyCreateView(CreateView):
    template_name = 'mytemplate.html'
    form_class = MyForm
    model = MyModel
    success_url = '/url-to-redirect-to/'

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.author = self.request.user
        self.object.save()
        return super().form_valid(form)

    def form_valid_redirect(self):
        return self.success_url

在这个例子中,我们也定义了一个名为 MyCreateView 的视图类,它是一个创建视图类,我们使用了 CreateView 来处理一个表单,并且 form_valid() 方法与例1中相同,但 form_valid_redirect() 方法直接返回指定的重定向URL。在这个例子中,我们使用了 success_url 成员变量,在表单提交成功后会自动重定向到指定的URL。

综上所述,form_valid_redirect() 函数可以方便地在表单验证成功后重定向用户到指定的页面,其使用方法包括定义一个返回重定向URL的重定向方法,或者直接使用类视图成员变量来指定重定向URL。