redirects (リダイレクト)アプリ¶
Django にはオプションで redirects (リダイレクト) アプリケーションが付属しています。リダイレクトをデータベースに保存し、リダイレクトを処理します。デフォルトでは HTTP 応答ステータスコード 301 Moved Permanently を使います。
インストール¶
redirects アプリをインストールするには、以下の手順に従ってください:
- django.contrib.sitesフレームワークが インストールされていること を確認してください。
- 'django.contrib.redirects'を- INSTALLED_APPS設定に追加します。
- MIDDLEWARE設定に- 'django.contrib.redirects.middleware.RedirectFallbackMiddleware'を追加します。
- コマンド - manage.py migrateを実行します。
しくみ¶
manage.py migrate はデータベースに django_redirect テーブルを作成します。これは、 site_id、 old_path、および new_path フィールドを持つルックアップテーブルです。
RedirectFallbackMiddleware が全ての作業を担当しています。Djangoアプリケーションが404エラーを発生させるたびに、このミドルウェアは要求されたURLが最終手段としてリダイレクトデータベースをチェックします。具体的には、与えられた old_path とサイトIDが SITE_ID 設定に対応するリダイレクトを確認します。
- 一致するものが見つかり、かつ - new_pathが空でない場合、301 ("Moved Permanently") リダイレクトで- new_pathにリダイレクトします。- RedirectFallbackMiddlewareをサブクラス化し、- response_redirect_classを- django.http.HttpResponseRedirectに設定して、- 302 Moved Temporarilyリダイレクトを代わりに使用できます。
- 一致するものが見つかり、 - new_pathが空であれば、410 ("Gone") HTTPヘッダーと空の (content-less) レスポンスを送信します。
- マッチするものが見つからない場合は、リクエストは通常通り処理されます。 
ミドルウェアは、404 エラーにのみアクティブ化され、500 エラーや他のステータスコードのレスポンスには適用されません。
MIDDLEWARE の順番は重要であることに注意してください。一般的に、 RedirectFallbackMiddleware をリストの最後に置くべきです。それは最終手段として機能します。
ミドルウェアについての詳細は ミドルウェアのドキュメント を参照してください。
リダイレクトの追加、変更、削除方法¶
admin インターフェイス経由¶
Django の自動管理インターフェイスを有効にしていれば、管理インデックスページに "Redirects" セクションがあるはずです。システムの他のオブジェクトを編集するように、リダイレクトを編集してください。
Python API 経由¶
- class models.Redirect¶
- リダイレクトは標準の Django モデル で表現され、 django/contrib/redirects/models.py にあります。 リダイレクトオブジェクトには、DjangoデータベースAPI を経由してアクセスできます。たとえば: - >>> from django.conf import settings >>> from django.contrib.redirects.models import Redirect >>> # Add a new redirect. >>> redirect = Redirect.objects.create( ... site_id=1, ... old_path="/contact-us/", ... new_path="/contact/", ... ) >>> # Change a redirect. >>> redirect.new_path = "/contact-details/" >>> redirect.save() >>> redirect <Redirect: /contact-us/ ---> /contact-details/> >>> # Delete a redirect. >>> Redirect.objects.filter(site_id=1, old_path="/contact-us/").delete() (1, {'redirects.Redirect': 1}) 
ミドルウェア¶
- class middleware.RedirectFallbackMiddleware¶
- ミドルウェアが使用する - HttpResponseクラスは、- RedirectFallbackMiddlewareのサブクラスを作成し、- response_gone_classや- response_redirect_classをオーバーライドすることで変更できます。- response_gone_class¶
- 要求されたパスが見つからないか、 - new_pathに空の値が含まれている時に、- Redirectが見つからないときに使用される- HttpResponseクラス。- デフォルトは - HttpResponseGoneです。
 - response_redirect_class¶
- リダイレクトを処理する - HttpResponseクラス。- デフォルトは - HttpResponsePermanentRedirectです。
 
 
          