Spec-Zone.ru › Django 6.0

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

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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API