Django—路由重定向

路由重定向

重定向称为HTTP协议重定向,也可以称为网页跳转,它对HTTP状态码为301、302、303、307、308。简单来说,网页重定向就是在浏览器访问某个网页的时候,这个网页不提供响应内容,而是自动跳转到其他网址,由其他网址来生成响应内容。
Django的网页重定向有两种方式:第一种方式是路由重定向;第二种方式是自定义视图的重定向。 两种重定向方式各有优点,前者是使用Django内置的视图类RedirectView实现的,默认支持HTTP的GET请求;后者是在自定义视图的响应状态设置重定向,能让开发者实现多方面开发需求。
我们在MyDjango项目里分别讲述Django的两种重定向方式,在index的urls.py中定义trunTo,其代码如下所示:

from django.urls import path
from . import views
from django.views.generic import RedirectView

urlpatterns = [
    # 添加带有字符类型、整型和slug的路由
    path('<year>/<int:month>/<slug:day>', views.mydate, name='mydate'),
    # 定义首页的路由
    path('', views.index, name='index'),
    # 设置路由跳转
    path('trunTo', RedirectView.as_view(url='/'), name='trunTo'),
    # path('trunTo', RedirectView.as_view(pattern_name='index:index'), name='trunTo'),
]

在路由里使用视图类RedirectView必须使用as_view方法将视图类实例化,参数url用于设置网页跳转的路由地址,"/"代表网站首页(路由命名为index的路由地址)。然后在index的views.py中定义视图函数mydate和index,代码如下:

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

def mydate(request, year, month, day):
    return HttpResponse(str(year) + '/' + str(month) + '/' + str(day))

def index(request):
    print(reverse('index:trunTo'))
    return redirect(reverse('index:mydate', args=[2019,12,12]))

视图函数index使用重定向函数redirect实现网页重定向的,这是Django内置的重定向函数,其函数参数只需传入路由地址即可实现重定向。
运行MyDjango项目,在浏览器上输入127.0.0.1:8000/turnTo,发现该网址首先通过视图类RedirectView重定向首页(路由命名为index),然后在视图函数index里使用重定向函数redirect跳转到路由命名为mydate的路由地址,如图所示:
在这里插入图片描述
从图中看出,浏览器的开发者工具记录了3条西悉尼,其中trunTo的请求信息是我们在浏览器输入的网址,而名为127.0.0.1的请求信息是网站首页,两者的HTTP状态码都是302,说明视图类RedirectView和重定向函数redirect皆能实现网站的重定向。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章