Декораторы представлений¶
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 запросы. Эти метода считаются «безопасными», потому что не должны предпринимать каких либо действий кроме получения данных.
Примечание
Django обрезает содержимое для HEAD запроса не изменяя заголовки ответа, по этому вы можете обрабатывать HEAD запросе тем же представлением, которое обрабатывает GET запросы. Так как некоторое программное обеспечение, например проверщик ссылок, используют HEAD запросы, возможно вам лучше использовать
require_safeвместоrequire_GET.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к ответу, указывая, что странице не должна никогда кэшироваться.Каждый заголовок добавляется только в том случае, если он еще не установлен.
Changed in Django 5.0:Добавлена поддержка переноса функций асинхронного представления.
Общий¶
Декораторы в django.views.decorators.common позволяют настраивать поведение CommonMiddleware для каждого представления.
- no_append_slash()¶
Этот декоратор позволяет исключить отдельные представления из нормализации URL-адресов
APPEND_SLASH.Changed in Django 5.0:Добавлена поддержка переноса функций асинхронного представления.