Django 原生自帶一個可選的重定向應(yīng)用。它將簡單的重定向保存到數(shù)據(jù)庫中并處理重定向。它默認使用HTTP 響應(yīng)狀態(tài)碼301 Moved Permanently。
請依照下面的步驟安裝重定向應(yīng)用:
django.contrib.sites 框架已經(jīng)安裝。django.contrib.redirects' 到 INSTALLED_APPS 設(shè)置中。django.contrib.redirects.middleware.RedirectFallbackMiddleware' 到MIDDLEWARE_CLASSES 設(shè)置中。manage.py migrate。manage.py migrate 在數(shù)據(jù)庫中創(chuàng)建一張django_redirect 表。它是一張簡單的查詢表,具有site_id、old_path 和new_path 字段。
RedirectFallbackMiddleware 完成所有的工作。每當Django 的應(yīng)用引發(fā)一個404 錯誤,該中間件將到重定向數(shù)據(jù)庫中檢查請求的URL。它會根據(jù)old_path 和SITE_ID 設(shè)置的站點ID 查找重定向的路徑。
new_path不為空,它將使用301(“Moved Permanently”)重定向到new_path 。你可以子類化RedirectFallbackMiddleware 并設(shè)置 response_redirect_class 為django.http.HttpResponseRedirect 來使用302 Moved Temporarily 重定向。new_path 為空,它將發(fā)送一個410 (“Gone”) HTTP 頭和空(沒有內(nèi)容的)響應(yīng)。這個中間件只針對404 錯誤啟用 —— 不能用于500 或其它狀態(tài)碼。
注意MIDDLEWARE_CLASSES 的順序很重要。通??梢詫?code>RedirectFallbackMiddleware 放在列表的最后,因為它最后執(zhí)行。
更多的信息可以閱讀中間件的文檔。
如果你已經(jīng)啟用Django 自動生成的Admin 接口,你應(yīng)該可以在Admin 的主頁看到“Redirects”部分。編輯這些重定向,就像編輯系統(tǒng)中的其它對象一樣。
class models.Redirect
重定向通過一個標準的Django 模型表示,位于django/contrib/redirects/models.py。你可以通過Django 的數(shù)據(jù)庫API 訪問重定向?qū)ο蟆?/p>
class middleware.RedirectFallbackMiddleware
你可以通過創(chuàng)建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 文檔協(xié)作翻譯小組,原文:Redirects。
本文以 CC BY-NC-SA 3.0 協(xié)議發(fā)布,轉(zhuǎn)載請保留作者署名和文章出處。
Django 文檔協(xié)作翻譯小組人手緊缺,有興趣的朋友可以加入我們,完全公益性質(zhì)。交流群:467338606。