リダイレクトアプリ—Djangoドキュメント

提供:Dev Guides
< DjangoDjango/docs/2.2.x/ref/contrib/redirects
移動先:案内検索

リダイレクトアプリ

Djangoにはオプションのリダイレクトアプリケーションが付属しています。 単純なリダイレクトをデータベースに保存し、リダイレクトを処理できます。 デフォルトでは、HTTP応答ステータスコード301 Moved Permanentlyを使用します。

インストール

リダイレクトアプリをインストールするには、次の手順に従います。

  1. django.contrib.sitesフレームワークがインストールされていることを確認してください
  2. 'django.contrib.redirects':setting: `INSTALLED_APPS` 設定に追加します。
  3. 'django.contrib.redirects.middleware.RedirectFallbackMiddleware':setting: `MIDDLEWARE` 設定に追加します。
  4. コマンドを実行します :djadmin: `manage.py移行 `


使い方

manage.py migrateは、データベースにdjango_redirectテーブルを作成します。 これは、site_idold_path、およびnew_pathフィールドを持つ単純なルックアップテーブルです。

RedirectFallbackMiddleware がすべての作業を行います。 Djangoアプリケーションで404エラーが発生するたびに、このミドルウェアは、最後の手段として、リダイレクトデータベースで要求されたURLをチェックします。 具体的には、:setting: `SITE_ID` 設定に対応するサイトIDを持つ指定されたold_pathのリダイレクトをチェックします。

  • 一致するものが見つかり、new_pathが空でない場合、301(「永続的に移動」)リダイレクトを使用してnew_pathにリダイレクトします。 RedirectFallbackMiddleware をサブクラス化し、 response_redirect_classdjango.http.HttpResponseRedirect に設定して、代わりに302 Moved Temporarilyリダイレクトを使用できます。
  • 一致するものが見つかり、new_pathが空の場合、410(「Gone」)HTTPヘッダーと空(コンテンツなし)の応答を送信します。
  • 一致するものが見つからない場合、リクエストは通常どおり処理され続けます。

ミドルウェアは404秒間のみアクティブ化され、500秒間または他のステータスコードの応答に対してはアクティブ化されません。

:setting: `MIDDLEWARE` の順序が重要であることに注意してください。 通常、 RedirectFallbackMiddleware は最後の手段であるため、リストの最後に置くことができます。

ミドルウェアの詳細については、ミドルウェアドキュメントをお読みください。


リダイレクトを追加、変更、削除する方法

管理インターフェース経由

自動Django管理インターフェースをアクティブにした場合は、管理者インデックスページに「リダイレクト」セクションが表示されます。 システム内の他のオブジェクトを編集するときに、リダイレクトを編集します。


PythonAPI経由

class models.Redirect
リダイレクトは、:source: `django / contrib / redirects / models.py` にある標準の Djangoモデルで表されます。 DjangoデータベースAPI を介してリダイレクトオブジェクトにアクセスできます。


ミドルウェア

class middleware.RedirectFallbackMiddleware

RedirectFallbackMiddleware のサブクラスを作成し、response_gone_classresponse_redirect_classをオーバーライドすることで、ミドルウェアで使用される HttpResponse クラスを変更できます。

response_gone_class

Redirect が要求されたパスで見つからないか、new_path値が空白の場合に使用される、 HttpResponse クラス。

デフォルトは HttpResponseGone です。

response_redirect_class

リダイレクトを処理する HttpResponse クラス。

デフォルトは HttpResponsePermanentRedirect です。