通過將重定向存儲在數據庫中并將其視為 Django 模型對象,Django 重定向框架讓你能夠輕松地管理它們。比如說,你可以通過重定向框架告訴Django,把任何指向 /music/的請求重定向到 /sections/arts/music/。當你需要在站點中移動一些東西時,這項功能就派上用場了——網站開發者應該窮盡一切辦法避免出現壞鏈接。
使用重定向框架
安裝重定向應用程序必須遵循以下步驟:
1. 將 'django.contrib.redirects'添加到 INSTALLED_APPS設置中。
2. 將 'django.contrib.redirects.middleware.RedirectFallbackMiddleware'添加到 MIDDLEWARE_CLASSES設置中。
3. 運行 manage.pysyncdb命令將所需的表安裝到數據庫中。
manage.pysyncdb在數據庫中創建了一個 django_redirect表。這是一個簡單的查詢表,只有 site_id、 old_path和 new_path三個字段。
你可以通過 Django 超級管理界面或者 Django 數據庫 API 來創建重定向。要了解更多信息,請參閱《增加、變更和刪除重定向》一節。
一旦創建了重定向, RedirectFallbackMiddleware類將完成所有的工作。每當 Django 應用引發一個 404 錯誤,作為終極手段,該中間件將為所請求的 URL 在重定向數據庫中進行查找。確切地說,它將使用給定的 old_path以及 SITE_ID設置對應的站點 ID 查找重定向設置。(查閱前面的《多站點》一節可了解關于 SITE_ID和多站點框架的更多細節) 然后,它將執行以下兩個步驟:
· 如果找到了匹配項,并且 new_path非空,它將重定向到 new_path。
· 如果找到了匹配項,但 new_path為空,它將發送一個 410 (Gone) HTTP 頭信息以及一個空(無內容)響應。
· 如果未找到匹配項,該請求將如常處理。
該中間件僅為 404 錯誤激活,而不會為 500 錯誤或其他任何狀態碼的響應所激活。
注意必須考慮 MIDDLEWARE_CLASSES的順序。通常,你可以將 RedirectFallbackMiddleware放置在列表的最后,因為它是一種終極手段。
注意
如果同時使用重定向和簡單頁面回退中間件, 必須考慮先檢查其中的哪一個(重定向或簡單頁面)。我們建議將簡單頁面放在重定向之前(因此將簡單頁面中間件放置在重定向中間件之前),但你可能有不同想法。
增加、變更和刪除重定向
你可以兩種方式增加、變更和刪除重定向:
通過超級管理界面
如果已經激活了全自動的 Django 超級管理界面,你應該能夠在超級管理首頁看到重定向區域??梢韵窬庉嬒到y中其它對象一樣編輯重定向。
通過 Python API
django/contrib/redirects/models.py中的一個標準 Django 模型代表了重定向。因此,你可以通過 Django 數據庫 API 來存取重定向對象,例如:
>>> from django.contrib.redirects.models import Redirect
>>> from django.contrib.sites.models import Site
>>> red = Redirect(
... site=Site.objects.get(id=1),
... old_path='/music/',
... new_path='/sections/arts/music/',
... )
>>> red.save()
>>> Redirect.objects.get(old_path='/music/')
<Redirect: /music/ ---> /sections/arts/music/>