重定向應用
Django 原生自帶一個可選的重定向應用。它将簡單的重定向儲存到資料庫中并處理重定向。它預設使用HTTP 響應狀态碼
301 Moved Permanently
。
安裝
請依照下面的步驟安裝重定向應用:
- 確定
架構已經安裝。django.contrib.sites
- 添加’
’ 到django.contrib.redirects
設定中。INSTALLED_APPS
-
django.contrib.redirects.middleware.RedirectFallbackMiddleware
MIDDLEWARE_CLASSES
- 運作指令
manage.py migrate
它是如何工作的
manage.py migrate
在資料庫中建立一張
django_redirect
表。它是一張簡單的查詢表,具有
site_id
、
old_path
和
new_path
字段。
RedirectFallbackMiddleware
完成所有的工作。每當Django 的應用引發一個404 錯誤,該中間件将到重定向資料庫中檢查請求的URL。它會根據
old_path
SITE_ID
設定的站點ID 查找重定向的路徑。
- 如果找到比對的記錄且
不為空,它将使用301(“Moved Permanently”)重定向到new_path
。你可以子類化new_path
并設定RedirectFallbackMiddleware
為response_redirect_class
來使用302 Moved Temporarily 重定向。django.http.HttpResponseRedirect
- 如果找到比對的記錄而
為空,它将發送一個410 (“Gone”) HTTP 頭和空(沒有内容的)響應。new_path
- 如果沒有找到比對的記錄,請求将繼續正常處理。
這個中間件隻針對404 錯誤啟用 —— 不能用于500 或其它狀态碼。
注意
MIDDLEWARE_CLASSES
的順序很重要。通常可以将
RedirectFallbackMiddleware
放在清單的最後,因為它最後執行。
更多的資訊可以閱讀
中間件的文檔如何添加、修改和删除重定向
通過Admin 接口
如果你已經啟用Django 自動生成的
Admin
接口,你應該可以在
Admin
的首頁看到“Redirects”部分。編輯這些重定向,就像編輯系統中的其它對象一樣。
通過Python API
class models.Redirect
重定向通過一個标準的Django 模型表示,位于
django/contrib/redirects/models.py
。你可以通過Django 的資料庫API 通路重定向對象。
中間件
class middleware.RedirectFallbackMiddleware
你可以通過建立
RedirectFallbackMiddleware
的子類并覆寫
response_gone_class
和/或
response_redirect_class
來修改中間件使用的
HttpResponse
類。
response_gone_class
New in Django 1.7.
HttpResponse
類,用于找不到請求路徑的
Redirect
或找到的
new_path
值為空的時候。
預設為
HttpResponseGone
response_redirect_class
New in Django 1.7.
處理重定向的
HttpResponse
HttpResponsePermanentRedirect
譯者: Django 文檔協作翻譯小組 ,原文: Redirects 本文以 CC BY-NC-SA 3.0 協定釋出,轉載請保留作者署名和文章出處。 人手緊缺,有興趣的朋友可以加入我們,完全公益性質。交流群:467338606。