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,所以會執行indexelse語句,會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即可

Tags: