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