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

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. Эти методы обычно считаются «безопасными», потому что они не должны иметь никакого значения для выполнения каких-либо действий, кроме получения запрошенного ресурса.

Примечание

Веб-серверы должны автоматически удалять содержимое ответов на запросы 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.

Разные заголовки

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

vary_on_headers(*headers)[исходный код]

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

Смотрите: ref: using different headers <using-vary-headers>.

Кэширование

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

cache_control(**kwargs)[исходный код]

Этот декоратор исправляет заголовок ответа Cache-Control, добавляя к нему все ключевые аргументы. Смотрите patch_cache_control() для получения подробной информации о преобразовании.

never_cache(view_func)[исходный код]

Этот декоратор добавляет заголовок Expires к текущей дате/времени.

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

Каждый заголовок добавляется только в том случае, если он еще не установлен.

Загальне

New in Django 3.2.

Декораторы в django.views.decorators.common позволяют настраивать для каждого представления поведение CommonMiddleware.

no_append_slash()[исходный код]

Этот декоратор позволяет исключить отдельные представления из APPEND_SLASH нормализации URL.

Вернуться на верх