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皆能實現網站的重定向。

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