Django(24)永久重定向和臨時重定向
重定向
重定向分為永久重定向
和臨時重定向
,在頁面上體現的操作就是瀏覽器會從一個頁面自動跳轉到另外一個頁面。比如用戶訪問了一個需要權限的頁面,但是該用戶當前並沒有登錄,因此我們應該給他重定向到登錄頁面。
- 永久重定向:http的狀態碼是
301
,多用於舊網址被廢棄了要轉到一個新的網址確保用戶的訪問,最經典的就是京東網站,你輸入www.jingdong.com
的時候,會被重定向到www.jd.com
,因為jingdong.com
這個網址已經被廢棄了,被改成jd.com
,所以這種情況下應該用永久重定向。 - 臨時重定向:http的狀態碼是
302
,表示頁面的暫時性跳轉。比如訪問一個需要權限的網址,如果當前用戶沒有登錄,應該重定向到登錄頁面,這種情況下,應該用暫時性重定向。
重定向函數redirect
在Django中,重定向是使用redirect(to, *args, permanent=False, **kwargs)
來實現的。
to
是一個url
地址,permanent
默認是False
代表臨時重定向,設置為True
代表永久重定向。
關於重定向的使用。請看以下例子:
# views.py
def index(request):
if request.GET.get('username'):
return HttpResponse("歡迎來到個人中心")
else:
return redirect(reverse('login'))
def index2(request):
return HttpResponse('登錄頁面')
# urls.py
urlpatterns = [
path('', views.index),
path('login/', views.index2, name="login")
]
接下來我們訪問127.0.0.1
,因為沒有攜帶參數username
,所以會執行index
的else
語句,會302臨時重定向到/login/
路由,我們可以通過Pycharm
控制台看到
[21/May/2021 03:04:45] "GET / HTTP/1.1" 302 0
[21/May/2021 03:04:45] "GET /login/ HTTP/1.1" 200 12
如果需求是要永久重定向,那麼將permanent
設置為True
即可