103. 重定向详解

重定向

重定向分为永久性重定向和暂时性重定向,在页面上的体现就是浏览器会从一个页面自动跳转到另外一个页面,比如用户访问了一个需要权限的页面,但是该用户当前并没有这种权限,二面就会自动跳转到能够赋予用户相应的权限的页面。

(1)永久性重定向:http的状态码是301,多用于旧网址被废弃的要跳转到一个新的网址,确保用户的访问,比如用户访问了www.jingdong.com的时候,会被重定向到www.jd.com,因为jingdong.com 这个网址已经被废弃了,改为jd.com,这种就是永久性重定向。
(2)暂时性重定向:http的状态码是302,表示页面的暂时性跳转。比如访问知乎的首页,访问zhihu.com,就会默认跳转到signup(注册)页面,只有登录或者是注册之后才会返回首页。这种重定向的方式就是暂时性的,登录过之后再次访问zhihu.com就可以正常访问首页了。

在Django中,重定向的状态码为302,重定向使用redirect(to, *args, premanent=False, **kwargs)来实现的。to是一个url,permanent代表的是这个重定向是否是一个永久性的重定向,默认是False。关于重定向的使用。示例代码如下:

from django.shortcuts import render, redirect, reverse
from django.http import HttpResponse


def index(request):
    # 如果没有在url中传递一个参数,就相当于没有注册或者是登录,就返回注册页面
    # 得到url中传递的参数,这种请求方式为GET请求
    username = request.GET.get('username')
    if username:
        return HttpResponse('index')
    else:
    # 将重定向的url名传入reverse()函数进行反转,就可以得到重定向的页面的url
        return redirect(reverse('signup'))


def signup(request):
    return HttpResponse('signup')
在book app中的urls.py文件中,示例代码如下
from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('signup/', views.signup, name='signup'),
]
在项目的urls.py文件中主url与子url的关系为:
from django.urls import path, include

urlpatterns = [
    path('book/', include('book.urls')),
]
在浏览器中输入url:127.0.0.1:3000/book/, 就会重定向到127.0.0.1:3000/book/signup/,

在这里插入图片描述

详细的查看book/的信息,我们可以看到状态码为302,即输入url:127.0.0.1:3000/book/会暂时性重定向到127.0.0.1:3000/book/signup/。

在这里插入图片描述

需要注意的是:如果在浏览器中输入:127.0.0.1:3000/book,没有后面的“/”,就会出现301 moved permantly,即为永久性的重定向到127.0.0.1:3000/book/。

在这里插入图片描述

猜你喜欢

转载自www.cnblogs.com/guyan-2020/p/12288035.html