📅  最后修改于: 2023-12-03 15:28:31.913000             🧑  作者: Mango
当应用程序需要将用户从一个URL重定向到另一个URL时,Django提供了方便的重定向功能。
在Django视图中,可以使用 redirect()
函数来进行基本的重定向。
from django.shortcuts import redirect
def my_view(request):
# 重定向到 '/new/url/'
return redirect('/new/url/')
该函数的参数为重定向到的URL字符串。
需要注意的是,redirect()
函数默认采用的是302重定向,也就是临时重定向。如果需要使用永久重定向,应该使用 HttpResponsePermanentRedirect
函数。
from django.http import HttpResponsePermanentRedirect
def my_view(request):
# 301 永久重定向到 '/new/url/'
return HttpResponsePermanentRedirect('/new/url/')
重定向时可以带有参数,使用 redirect()
函数时只需要指定参数即可:
from django.shortcuts import redirect
def my_view(request):
# 带参数的重定向
return redirect('/new/url/?param=value')
同样的,也可以使用 HttpResponsePermanentRedirect
函数实现永久重定向。
在应用程序中,通常使用命名URL而不是硬编码URL的方式。这种情况下,Django仍然提供了方便的重定向功能。
在Django视图中,可以使用 reverse()
函数获取命名URL并进行重定向。
from django.shortcuts import redirect
from django.urls import reverse
def my_view(request):
# 获取命名URL并重定向
url = reverse('new_url_name')
return redirect(url)
同样的,也可以使用 HttpResponsePermanentRedirect
函数实现永久重定向。
在某些情况下,需要在重定向时使用其它的HTTP状态码。在这种情况下,可以使用 HttpResponse
类并进行自定义响应,例如:
from django.http import HttpResponse
def my_view(request):
# 返回一个带有新Location的重定向响应(使用301作为状态码)
response = HttpResponse(status=301)
response['Location'] = '/new/url/'
return response
在Django中,重定向是一种非常常见的应用场景。通过使用重定向功能,可以使应用程序具有更好的用户体验和更好的代码可读性。