.. _ref-middleware: ===================================== 組み込みミドルウェアリファレンス ===================================== :revision-up-to: 8964 (1.0) .. module:: django.middleware :synopsis: Django の組み込みミドルウェアクラスです。 このドキュメントでは、 Django に付属している全ミドルウェアコンポーネントに ついて解説しています。ミドルウェアの使い方や自作のミドルウェアの書き方はm :ref:`ミドルウェアの使い方ガイド ` を参照してくださ い。 利用できるミドルウェア ====================== .. _Cache middleware: キャッシュミドルウェア ------------------------ .. module:: django.middleware.cache :synopsis: サイト単位のキャッシュを実現するミドルウェアです。 .. class:: django.middleware.cache.UpdateCacheMiddleware .. class:: django.middleware.cache.FetchFromCacheMiddleware サイト全体にわたるキャッシュを有効にします。キャッシュを有効にすると、 Django の管理下にあるページは :setting:`CACHE_MIDDLEWARE_SECONDS` 設定に定 義した時間のキャッシュされます。 :ref:`キャッシュのドキュメント ` を参照してください。 .. _"Common" middleware: コモンミドルウェア ------------------- .. module:: django.middleware.common :synopsis: 完全主義者むけに、「一般的な」便宜機能を追加するミドルウェアです。 .. class:: django.middleware.common.CommonMiddleware リクエスト処理に完全主義者むけの便宜機能を追加するミドルウェアです: * :setting:`DISALLOWED_USER_AGENTS` に設定されたユーザエージェントから のアクセスを禁止します。 :setting:`DISALLOWED_USER_AGENTS` には文字列 のリストを指定します。 * :setting:`APPEND_SLASH` および :setting:`PREPEND_WWW` に基づいて URL の書き換えを行います。 :setting:`APPEND_SLASH` が ``True`` の場合、リクエストの URL の末尾が スラッシュで終わっておらず、 URLconf 上でもマッチしなければ、 スラッ シュを付加した URL を作成して、 URLconf でマッチするか確かめます。マッ チすれば、スラッシュつきの URL にリダイレクトします。そうでなければ、 URL を通常の手順に従って処理します。 例えば、 ``foo.com/bar`` に一致するパターンがなく、 ``foo.com/bar/`` に一致するパターンが *あれば* 、 ``foo.com/bar`` は ``foo.com/bar/`` にリダイレクトされます。 .. versionchanged:: 1.0 開発版では、 :setting:`APPEND_SLASH` の挙動が若干変更されました。 以前のバージョンでは、リクエストの URL が URLconf とマッチするか どうかに関係なくスラッシュを付加していました。 :setting:`PREPEND_WWW` が ``True`` であれば、先頭に, "www." のない URL は先頭に"www." を付けた URL にリダイレクトします。 それぞれのオプションは URL を正規化するためのものです。これは、 URL (Uniform Resorce Location) がただひとつの、真にただひとつの場所 (Location) を表すべきであるという哲学に基づいています。技術的には、 ``foo.com/bar`` は ``foo.com/bar/`` とは別物です -- 例えば、検索エン ジンはこの二つの URL を別々の URL として扱うかもしれません -- ですか ら、 URL を正規化しておく方が得策なのです。 * :setting:`USE_ETAGS` 設定に基づいて ETag を処理します。 :setting:`USE_ETAGS` を ``True`` に設定すると、 Django は各リクエスト ごとにページ内容の MD-5 ハッシュを計算して ETag にし、必要なら ``Not Modified`` 応答を返します。 .. _View metadata middleware: ビューメタデータミドルウェア -------------------------------- .. module:: django.middleware.doc :synopsis: アプリケーションの自動ドキュメントを補助するミドルウェアです。 .. class:: django.middleware.doc.XViewMiddleware :setting:`INTERNAL_IPS` 設定に定義されている IP アドレスから来た HEAD リク エストに対してカスタムの ``X-View`` HTTP ヘッダを送信します。このミドルウェ アはDjango の自動ドキュメントシステムで使われています。 .. _GZIP middleware: GZIP ミドルウェア --------------------- .. module:: django.middleware.gzip :synopsis: コンテンツを gzip 圧縮してパフォーマンスを向上させるミドルウェ アです。 .. class:: django.middleware.gzip.GZipMiddleware gzip 圧縮を受け付けるブラウザ (最近のほとんどのブラウザがそうです) 向けに、 コンテンツを圧縮して送ります。 このミドルウェアは、ミドルウェアリストの先頭に置くよう勧めます。なぜなら、 コンテンツの圧縮は最後に行うべきものだからです。このミドルウェアは、 200 バ イト未満のコンテンツを圧縮しません。また、状態コード 200 以外のレスポンス内 のコンテンツ、Javascript ファイル (IE との互換性のため)、 ``Content-Encoding`` が指定されているレスポンスも圧縮しません。 .. _Conditional GET middleware: 条件付き GET ミドルウェア -------------------------- .. module:: django.middleware.http :synopsis: 高度な HTTP 機能を扱うためのミドルウェアです。 .. class:: django.middleware.http.ConditionalGetMiddleware 条件付き GET 操作を処理します。レスポンスに ``ETag`` または ``Last-Modified`` ヘッダがあり、リクエストに ``If-None-Match`` または ``If-Modified-Since`` がある場合、レスポンスを :class:`~django.http.HttpNotModified` に置き換えます。 また、 ``Date`` および ``Content-Length`` ヘッダを設定します。 .. _Reverse proxy middleware: リバースプロキシミドルウェア ------------------------------ .. class:: django.middleware.http.SetRemoteAddrFromForwardedFor ``request.META['HTTP_X_FORWARDED_FOR']`` が設定されていた場合、その値に基づ いて ``request.META['REMOTE_ADDR']`` をセットします。サーバがリバースプロキ シの向こうにあるためにリクエストの ``REMOTE_ADDR`` が ``127.0.0.1`` にセッ トされてしまう場合に便利です。 **注意事項:** このミドルウェアは ``HTTP_X_FORWARDED_FOR`` を検証 **しません** ``HTTP_X_FORWARDED_FOR`` を自動的に設定するリバースプロキシ を経由していない場合には、このミドルウェアを使ってはなりません。なぜなら、 ``HTTP_X_FORWARDED_FOR`` の値はだれでも簡単に偽装できるので、このミドルウェ アが ``REMOTE_ADDR`` に基づいて ``HTTP_X_FORWARDED_FOR`` を設定すると、誰も が "偽の" IP アドレスを名乗れてしまうからです。このミドルウェアを使ってよい のは、 ``HTTP_X_FORWARDED_FOR`` の値を完全に信用できる場合だけです。 .. _Locale middleware: ロケールミドルウェア --------------------- .. module:: django.middleware.locale :synopsis: リクエストに基づいて言語設定を選択するミドルウェアです。 .. class:: django.middleware.locale.LocaleMiddleware リクエストに基づいて言語の選択を行います。言語の選択によって、ユーザごとに 提供するコンテンツをカスタマイズできます。 :ref:`国際化のドキュメント ` を参照してください。 .. _Session middleware: セッションミドルウェア ------------------------- .. module:: django.contrib.sessions.middleware :synopsis: セッションミドルウェアです。 .. class:: django.contrib.sessions.middleware.SessionMiddleware セッションのサポートを有効にします。 :ref:`セッションのドキュメント ` も参照してください。 .. _Authentication middleware: 認証ミドルウェア ------------------------- .. module:: django.contrib.auth.middleware :synopsis: 認証ミドルウェアです。 .. class:: django.contrib.auth.middleware.AuthenticationMiddleware 入力される ``HttpRequest`` オブジェクト全てに、現在ログインしているユーザを 表す ``user`` 属性を追加します。 :ref:`Web リクエストの認証 ` を参照してください。 .. _CSRF protection middleware: CSRF 対策ミドルウェア -------------------------- .. module:: django.contrib.csrf.middleware :synopsis: クロスサイトリクエストフォージェリ (Cross Site Request Forgery) 対策のためのミドルウェアです。 .. class:: django.contrib.csrf.middleware.CsrfMiddleware .. versionadded:: 1.0 POST フォームに隠しフォームフィールドを追加し、リクエストデータに正しい値が 設定されているかチェックすることによりクロスサイトリクエストフォージェリ (CSRF) を防ぎます。詳しくは :ref:`クロスサイトリクエストフォージェリからの保護 ` を参 照してください。 .. _Transaction middleware: トランザクションミドルウェア ----------------------------- .. module:: django.middleware.transaction :synopsis: 各 Web リクエストにデータベーストランザクションを結びつけるミ ドルウェアです。 .. class:: django.middleware.transaction.TransactionMiddleware リクエスト/レスポンス処理フェイズに commit と rollback をバインドします。 あるビュー関数の実行に成功した場合に commit を、例外を送出して失敗した場合 には rollback を行わせます。 このミドルウェアでは、スタック中の順番が重要になります。このミドルウェアの 外で動作する他のミドルウェアモジュールは、Django のデフォルトの挙動、すなわ ち commit-on-save モードで動作します。このミドルウェアの内側にある (スタッ クの後ろに位置している) ミドルウェアは、ビュー関数と同じトランザクション制 御下に置かれます。 :ref:`トランザクション管理のドキュメント ` を参照し てください。