📅  最后修改于: 2023-12-03 15:01:20.361000             🧑  作者: Mango
HttpResponseRedirect
是 Django 允许的最简单的重定向方式。视图可以将其包装在 HttpResponse
对象中,并在其中提供重定向的 URL。当客户重定向到这个新的 URL 后,他们将与一个新的请求打交道,同时,一些数据将被巧妙地接收到这个新的请求中。用户将永久重定向到新的 URL 上。
在 Django 中,我们常用的情况是当用户未经身份验证尝试访问需要身份验证的 URL 时,我们将它们自动重定向到登陆页面。我们也可以使用 HttpResponseRedirect
在视图中实现重定向,例如,当一个表单被成功提交时,我们希望用户被重定向到一个新的页面或一个一般性成功页面。
注意: Django 中的 HttpResponseRedirect
重定向是幂等的,因此它们会阻止重放攻击。也就是说,它们可以在 GET 请求中使用而无需担心重复提交。
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from django.shortcuts import render
def my_view(request):
# 处理表单请求
if request.method == 'POST':
# 处理表单数据
# ...
# 处理成功后重定向到成功页面
return HttpResponseRedirect(reverse('success'))
# 渲染模板并返回HttpResponse
return render(request, 'template.html')
在上述代码中,在处理表单请求时,如果表单数据处理成功,我们将使用 HttpResponseRedirect
重定向到成功页面。reverse
函数用于生成成功页面的 URL。对于重定向,我们不需要使用 render
函数,因为 HttpResponseRedirect
对象已经包含了需要在新请求中显示的所有数据。
通过 HttpResponseRedirect
我们可以实现两种类型的重定向:永久重定向和临时重定向。
如果您想重定向到的页面已经永久移动到了新的 URL,那么您可以使用 301 responded 代码。这将告诉浏览器客户端该页面永久重定向到新位置,并且不再使用旧位置。
永久重定向可以通过设置 HttpResponseRedirect
的 status 参数为 301
实现:
def my_view(request):
...
return HttpResponseRedirect('/new-url/', status=301)
如果您只是想临时重定向到一个新的 URL,那么您应该使用 302 responded 代码。这将告诉浏览器客户端该页面已经被临时移动到新位置,但是仍然可以在旧位置获得。例如,在博客层面,如果您愿意在此刻将访问者转向到临时站点(如意义不大的站点),那么您可以使用 302 responded 代码。
临时重定向可以通过不显示 status 参数,或将其设置为 302
来实现:
def my_view(request):
...
# 使用旧 URL 临时重定向到新 URL
return HttpResponseRedirect('/new-url/')