РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
331 of 818 menu

Декоратор require_safe

Декоратор require_safe применяется к функциям представлений и ограничивает доступ к ним только безопасными HTTP-методами - GET, HEAD и OPTIONS. Этот декоратор является частью модуля django.views.decorators.http. Если клиент отправляет запрос с методом, не входящим в список безопасных, представление вернет ответ с кодом статуса 405 (Method Not Allowed). Декоратор не принимает дополнительных аргументов.

Синтаксис

from django.views.decorators.http import require_safe @require_safe def my_view(request): # Обработка безопасного запроса pass

Пример . С использованием GET-запроса

Давайте создадим представление, которое будет доступно только через безопасные методы, и обработаем GET-запрос:

from django.http import HttpResponse from django.views.decorators.http import require_safe @require_safe def article_list(request): articles = [ {"id": 1, "title": "First article"}, {"id": 2, "title": "Second article"}, ] return HttpResponse(f"Articles: {articles}")

Пример . С обработкой HEAD-запроса

Декоратор также разрешает HEAD-запросы, которые не возвращают тело ответа, но содержат те же заголовки, что и GET-запрос:

from django.http import HttpResponse from django.views.decorators.http import require_safe @require_safe def article_detail(request, article_id): article = {"id": article_id, "title": f"Article {article_id}"} response = HttpResponse(f"Article: {article}") response["X-Article-ID"] = str(article_id) return response

Результат выполнения HEAD-запроса:

"Response body is empty, but headers exist: X-Article-ID=5"

Пример . С POST-запросом (запрещен)

Попробуем отправить POST-запрос к представлению, защищенному декоратором require_safe:

from django.http import HttpResponse from django.views.decorators.http import require_safe from django.core.exceptions import PermissionDenied @require_safe def create_article(request): # Этот код не выполнится при POST-запросе if request.method == "POST": return HttpResponse("Article created") return HttpResponse("Send POST request to create article")

При попытке отправить POST-запрос к этому представлению будет возвращен ответ с кодом 405:

"Method Not Allowed (POST)"

Смотрите также

  • декоратор require_GET,
    который разрешает только GET-запросы
  • декоратор require_POST,
    который разрешает только POST-запросы
  • декоратор require_http_methods,
    который разрешает указанные HTTP-методы
  • декоратор csrf_exempt,
    который отключает CSRF-защиту для представления
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить