ビューのデコレータ

Djangoでは、さまざまなHTTP機能をサポートするために、ビューに適用できるいくつかのデコレータが提供されています。

ここで紹介するデコレータをクラスベースのビューで使用する方法については、 クラスをデコレーションする を参照してください。

特定のHTTPメソッドのみ許可する

django.views.decorators.http にあるデコレータを使用することで、リクエストメソッドに基づいてビューへのアクセスを制限できます。アクセスが制限されるとき、これらのデコレータは django.http.HttpResponseNotAllowed を返します。

require_http_methods(request_method_list)

ビューが特定のリクエストメソッドのみを受け付けるようにするデコレータです。以下のように使います。

from django.views.decorators.http import require_http_methods


@require_http_methods(["GET", "POST"])
def my_view(request):
    # I can assume now that only GET or POST requests make it this far
    # ...
    pass

リクエストメソッドは大文字で指定する必要があることに注意してください。

Changed in Django 5.0:

非同期ビュー関数のラップをサポートしました。

require_GET()

ビューがGETメソッドのみを受け付けるようにするデコレータです。

Changed in Django 5.0:

非同期ビュー関数のラップをサポートしました。

require_POST()

ビューがPOSTメソッドのみを受け付けるようにするデコレータです。

Changed in Django 5.0:

非同期ビュー関数のラップをサポートしました。

require_safe()

ビューが GET メソッドと HEAD メソッドのみを受け付けるようにするデコレータです。これらのメソッドは、要求されたリソースを取得する以外の動作をする意図を持たないので、一般的に "安全である" と考えられています。

注釈

Webサーバーは、ヘッダーを変更せずに、レスポンスのコンテンツをHEADリクエストから自動的に削除するべきです。そのため、ビューではHEADリクエストをGETリクエストとまったく同じように処理できます。リンクチェッカーなどの一部のソフトウェアはHEADリクエストに依存しているため、 require_GET の代わりに require_safe を使用することをお勧めします。

Changed in Django 5.0:

非同期ビュー関数のラップをサポートしました。

条件付きのビュー処理

django.views.decorators.http にある以下のデコレータを使って、特定のビューのキャッシュ動作を制御できます。

condition(etag_func=None, last_modified_func=None)
etag(etag_func)
last_modified(last_modified_func)

これらのデコレータは ETagLast-Modified ヘッダを生成するために使用できます。詳細は 条件付きのビュー処理 を参照してください。

Changed in Django 5.0:

非同期ビュー関数のラップをサポートしました。

GZip 圧縮

django.views.decorators.gzip のデコレータは、ビュー単位でコンテンツの圧縮を制御します。

gzip_page()

このデコレータは、ブラウザが gzip 圧縮を許可している場合にコンテンツを圧縮します。それに応じて Vary ヘッダを設定し、キャッシュがそのストレージを Accept-Encoding ヘッダに基づいて行うようにします。

Changed in Django 5.0:

非同期ビュー関数のラップをサポートしました。

Vary ヘッダ

django.views.decorators.vary のデコレータを使って、特定のリクエストヘッダに基づいてキャッシュを制御できます。

Changed in Django 5.0:

非同期ビュー関数のラップをサポートしました。

vary_on_headers(*headers)

Vary ヘッダーはキャッシュメカニズムがキャッシュキーを構築するときにどのリクエストヘッダを考慮すべきかを定義します。

詳しくは vary ヘッダを使う を参照してください。

Changed in Django 5.0:

非同期ビュー関数のラップをサポートしました。

キャッシュ

django.views.decorators.cache のデコレータで、サーバーサイドとクライアントサイドのキャッシュを制御できます。

cache_control(**kwargs)

このデコレータはレスポンスの Cache-Control ヘッダにキーワード引数を全て追加してパッチを適用します。変換の詳細については patch_cache_control() を参照してください。

Changed in Django 5.0:

非同期ビュー関数のラップをサポートしました。

never_cache(view_func)

このデコレータは、現在の日付/時刻に Expires ヘッダを追加します。

このデコレータは、 Cache-Control: max-age=0, no-cache, no-store, must-revalidate, private ヘッダをレスポンスに追加し、ページがキャッシュされないように設定します。

それぞれのヘッダーは、未設定の場合にのみ追加されます。

Changed in Django 5.0:

非同期ビュー関数のラップをサポートしました。

Common(一般)

django.views.decorators.common のデコレータで、 CommonMiddleware の動作をビューごとにカスタマイズできます。

no_append_slash()

このデコレータは、個々のビューを APPEND_SLASH URL 正規化から除外します。

Changed in Django 5.0:

非同期ビュー関数のラップをサポートしました。

Back to Top