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技术站