ビューのデコレータ¶
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)¶ これらのデコレータは
ETag
とLast-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
のデコレータを使って、特定のリクエストヘッダに基づいてキャッシュを制御できます。
-
vary_on_cookie
(func)¶ - 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:非同期ビュー関数のラップをサポートしました。