Декораторы представлений

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

Заметим, что тип запроса должен быть указан в верхнем регистре.

require_GET()

Декоратор позволяет представлению обрабатывать только GET-запросы.

require_POST()

Декоратор позволяет представлению обрабатывать только POST-запросы.

require_safe()

Декоратор позволяет представлению обрабатывать только GET и HEAD запросы. Эти метода считаются “безопасными”, потому что не должны предпринимать каких либо действий кроме получения данных.

Примечание

Django обрезает содержимое для HEAD запроса не изменяя заголовки ответа, по этому вы можете обрабатывать HEAD запросе тем же представлением, которое обрабатывает GET запросы. Так как некоторое программное обеспечение, например проверщик ссылок, используют HEAD запросы, возможно вам лучше использовать require_safe вместо require_GET.

Условная обработка запроса

Декораторы из модуля django.views.decorators.http могут быть использованы для управления кэширования определенных представлений.

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

Эти декораторы могут использоваться для генерации заголовков ETag и Last-Modified; смотрите раздел про условную обработку запроса.

Сжатие с использованием GZip

Декораторы из django.views.decorators.gzip управляют сжатием ответа представления.

gzip_page()

Этот декоратор сжимает содержимое ответа, если браузер допускает gzip сжатие. Он устанавливает соответствующий заголовок Vary указывая учитывать заголовок Accept-Encoding при кэшировании.

Заголовки Vary

Декораторы из модуля django.views.decorators.vary могут использоваться для кэширования по определенным заголовкам запроса.

vary_on_headers(*headers)

Заголовок Vary указывает какие заголовки должен использоваться кэширующий механизм при создании ключа кэша.

Смотрите использование Vary заголовка.

Кэширование

Декораторы из django.views.decorators.cache управляют кэшированием на стороне сервера и клиента

never_cache(view_func)

Декоратор добавляет заголовок Cache-Control: max-age=0, no-cache, no-store, must-revalidate к ответу, указывая, что странице не должна никогда кэшироваться.

Изменено в Django 1.9:

До Django 1.9 отправлялся Cache-Control: max-age=0. Это не работало во всех браузерах.