# Django 5.0.9.dev20240806133106 ドキュメント

# ビューのデコレータ

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:

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