---
title: "ビューのデコレータ"
version: 5.2
locale: ja
source: https://docs.djangoproject.com/ja/5.2/topics/http/decorators/
canonical: https://djangodocs.dev/ja/5.2/topics/http/decorators/
---
# ビューのデコレータ

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

ここで紹介するデコレータをクラスベースのビューで使用する方法については、 [クラスをデコレーションする](/ja/5.2/topics/class-based-views/intro/#id1) を参照してください。

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

[`django.views.decorators.http`](#module-django.views.decorators.http) にあるデコレータを使用することで、リクエストメソッドに基づいてビューへのアクセスを制限できます。アクセスが制限されるとき、これらのデコレータは [`django.http.HttpResponseNotAllowed`](/ja/5.2/ref/request-response/#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
```

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

#### `require_GET()`

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

#### `require_POST()`

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

#### `require_safe()`

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

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

## 条件付きのビュー処理

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

#### `condition(etag_func=None, last_modified_func=None)`

#### `conditional_page()`

このデコレータを使用すると、ビューに [`ConditionalGetMiddleware`](/ja/5.2/ref/middleware/#django.middleware.http.ConditionalGetMiddleware) と同等の条件付き GET 処理を追加できます。

#### `etag(etag_func)`

#### `last_modified(last_modified_func)`

これらのデコレータは `ETag` と `Last-Modified` ヘッダを生成するために使用できます。詳細は [条件付きのビュー処理](/ja/5.2/topics/conditional-view-processing/) を参照してください。

## GZip 圧縮

[`django.views.decorators.gzip`](#module-django.views.decorators.gzip) のデコレータは、ビュー単位でコンテンツの圧縮を制御します。

#### `gzip_page()`

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

## Vary ヘッダ

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

#### `vary_on_cookie(func)`

#### `vary_on_headers(*headers)`

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

詳しくは [vary ヘッダを使う](/ja/5.2/topics/cache/#using-vary-headers) を参照してください。

## キャッシュ

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

#### `cache_control(**kwargs)`

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

#### `never_cache(view_func)`

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

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

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

## Common（一般）

[`django.views.decorators.common`](#module-django.views.decorators.common) のデコレータで、 [`CommonMiddleware`](/ja/5.2/ref/middleware/#django.middleware.common.CommonMiddleware) の動作をビューごとにカスタマイズできます。

#### `no_append_slash()`

このデコレータは、個々のビューを [`APPEND_SLASH`](/ja/5.2/ref/settings/#std-setting-APPEND_SLASH) URL 正規化から除外します。
