📜  重定向 django - Python (1)

📅  最后修改于: 2023-12-03 15:28:31.913000             🧑  作者: Mango

重定向 Django - Python

当应用程序需要将用户从一个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而不是硬编码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中,重定向是一种非常常见的应用场景。通过使用重定向功能,可以使应用程序具有更好的用户体验和更好的代码可读性。