posts - 431,  comments - 344,  trackbacks - 0

          通過將重定向存儲在數(shù)據(jù)庫中并將其視為 Django 模型對象,Django 重定向框架讓你能夠輕松地管理它們。比如說,你可以通過重定向框架告訴Django,把任何指向 /music/的請求重定向到 /sections/arts/music/。當(dāng)你需要在站點(diǎn)中移動一些東西時,這項功能就派上用場了——網(wǎng)站開發(fā)者應(yīng)該窮盡一切辦法避免出現(xiàn)壞鏈接。

          使用重定向框架

          安裝重定向應(yīng)用程序必須遵循以下步驟:

          1.    將 'django.contrib.redirects'添加到 INSTALLED_APPS設(shè)置中。

          2.    將 'django.contrib.redirects.middleware.RedirectFallbackMiddleware'添加到 MIDDLEWARE_CLASSES設(shè)置中。

          3.    運(yùn)行 manage.pysyncdb命令將所需的表安裝到數(shù)據(jù)庫中。

          manage.pysyncdb在數(shù)據(jù)庫中創(chuàng)建了一個 django_redirect表。這是一個簡單的查詢表,只有 site_id、 old_path和 new_path三個字段。

          你可以通過 Django 超級管理界面或者 Django 數(shù)據(jù)庫 API 來創(chuàng)建重定向。要了解更多信息,請參閱《增加、變更和刪除重定向》一節(jié)。

          一旦創(chuàng)建了重定向, RedirectFallbackMiddleware類將完成所有的工作。每當(dāng) Django 應(yīng)用引發(fā)一個 404 錯誤,作為終極手段,該中間件將為所請求的 URL 在重定向數(shù)據(jù)庫中進(jìn)行查找。確切地說,它將使用給定的 old_path以及 SITE_ID設(shè)置對應(yīng)的站點(diǎn) ID 查找重定向設(shè)置。(查閱前面的《多站點(diǎn)》一節(jié)可了解關(guān)于 SITE_ID和多站點(diǎn)框架的更多細(xì)節(jié)) 然后,它將執(zhí)行以下兩個步驟:

          ·         如果找到了匹配項,并且 new_path非空,它將重定向到 new_path。

          ·         如果找到了匹配項,但 new_path為空,它將發(fā)送一個 410 (Gone) HTTP 頭信息以及一個空(無內(nèi)容)響應(yīng)。

          ·         如果未找到匹配項,該請求將如常處理。

          該中間件僅為 404 錯誤激活,而不會為 500 錯誤或其他任何狀態(tài)碼的響應(yīng)所激活。

          注意必須考慮 MIDDLEWARE_CLASSES的順序。通常,你可以將 RedirectFallbackMiddleware放置在列表的最后,因為它是一種終極手段。

          注意

          如果同時使用重定向和簡單頁面回退中間件, 必須考慮先檢查其中的哪一個(重定向或簡單頁面)。我們建議將簡單頁面放在重定向之前(因此將簡單頁面中間件放置在重定向中間件之前),但你可能有不同想法。

          增加、變更和刪除重定向

          你可以兩種方式增加、變更和刪除重定向:

          通過超級管理界面

          如果已經(jīng)激活了全自動的 Django 超級管理界面,你應(yīng)該能夠在超級管理首頁看到重定向區(qū)域。可以像編輯系統(tǒng)中其它對象一樣編輯重定向。

          通過 Python API

          django/contrib/redirects/models.py中的一個標(biāo)準(zhǔn) Django 模型代表了重定向。因此,你可以通過 Django 數(shù)據(jù)庫 API 來存取重定向?qū)ο螅纾?

          >>> 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/>

          posted on 2008-12-05 15:43 周銳 閱讀(460) 評論(0)  編輯  收藏 所屬分類: Python
          主站蜘蛛池模板: 八宿县| 青田县| 宜君县| 鄱阳县| 石阡县| 安吉县| 威宁| 安岳县| 伊川县| 张家界市| 金塔县| 绥化市| 深圳市| 南阳市| 自治县| 铁力市| 富裕县| 全南县| 盐城市| 舟山市| 九江县| 开原市| 平泉县| 敦煌市| 永顺县| 香河县| 紫云| 舟曲县| 隆昌县| 佛教| 盐亭县| 闽侯县| 麦盖提县| 河池市| 榆树市| 景德镇市| 神木县| 南陵县| 荆门市| 剑河县| 博客|