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

提供:Dev Guides
< DjangoDjango/docs/3.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 を介してリダイレクトオブジェクトにアクセスできます。 例えば:

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

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

response_gone_class

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

デフォルトは HttpResponseGone です。

response_redirect_class

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

デフォルトは HttpResponsePermanentRedirect です。