重定向的实现方式:
- 调用函数 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')),
]