python-Django 重定向

80 阅读2分钟

重定向的实现方式:

  • 调用函数 redirect 和 reverse;
  • 从视图返回 HttpResponseRedirect 或 HttpResponsePermanentRedirect 实例;
  • RedirectView 视图类;
  • 状态码:302,301。

重定向是什么?

就是将用户从一个 URL 自动转到另外一个。

在HTTP协议中,重定向是一种机制,由服务器向请求发送特殊的响应触发。

具体来说,这个响应包含一个以3开头的状态码,以及Location标头,其保存了需要重定向到的新URL。当浏览器接收到这样的重定向响应时,它会自动加载Location标头中提供的新URL。

重定向的状态码,以3开头的有好几种,例如301、302、304、305、306等, 可以分为

  • 永久重定向 状态码301
  • 临时重定向 状态码302
  • 特殊重定向三大类

什么情况下我们需要重定向呢?

  • 当您未登录并请求需要身份验证的 URL(例如 Django admin)时,Django 会将您重定向到登录页面;

  • 成功登录后,Django 会将您重定向到您最初请求的 URL;

  • 使用 Django 管理员更改密码时,您将被重定向到指示更改成功的页面

  • 迁移网址

代码示例

# views.py
from django.shortcuts import redirect, render

def hello_view(reques):
    return render("hello.html")

# 方法一
def redirect_view(request):
    response = redirect('/redirect-success/') # 这里跳转到另外一个URL,比如`http://mywebsite.com/redirect-success/`,然后找到相应的URL所对应的视图逻辑再执行
    return response

# 方法二
def redirect_view(request):
  return HttpResponseRedirect('/redirect-success/')
  
def redirect_success_view(request):
    return render("success.html") # 渲染相应的模板
# urls.py
from django.urls import path

from . import views

urlpatterns = [
    path('/hello/', veiw.hello_view),
    path('/redirect/', veiw.redirect_view), # 如果请求URL匹配成功,比如请求`http://mywebsite.com/redirect/`,就会到运行相应的视图逻辑
    path('/redirect-success/', veiw.redirect_success_view),
    # ... more URL patterns here
]
#urls.py
from django.views.generic.base import RedirectView

urlpatterns = [
    path('/search/<term>/',
         RedirectView.as_view(url='https://google.com/?q=%(term)s')),
]