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
です。