Декораторы представлений
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)[исходный код]
-
conditional_page() -
Этот декоратор добавляет к представлению обработку условных GET-запросов, предусмотренную
ConditionalGetMiddleware.
-
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_cookie(func)
-
vary_on_headers(*headers)[исходный код] -
Заголовок
Varyуказывает, какие заголовки запроса механизм кэширования должен учитывать при формировании ключа кэша.См. раздел использование заголовков Vary.
Кэширование
Декораторы из 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, указывающий, что страницу нельзя кэшировать.Каждый заголовок добавляется только в том случае, если он ещё не задан.
Общие декораторы
Декораторы из django.views.decorators.common позволяют настраивать поведение CommonMiddleware отдельно для каждого представления.
-
no_append_slash()[исходный код] -
Этот декоратор позволяет исключить отдельные представления из нормализации URL, выполняемой согласно настройке
APPEND_SLASH.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/6.0/topics/http/decorators/