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

Декоратор require_GET

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

Синтаксис

from django.views.decorators.http import require_GET from django.http import HttpResponse @require_GET def view_name(request): # код обработки GET-запроса return HttpResponse("Ответ")

Пример

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

from django.views.decorators.http import require_GET from django.http import JsonResponse from myapp.models import Article @require_GET def article_list(request): articles = Article.objects.all().values('id', 'title') return JsonResponse(list(articles), safe=False)

Если к этому представлению обратиться через GET-запрос, оно вернет список статей в формате JSON. Если же попытаться отправить POST-запрос, Django вернет ошибку 405:

"Method Not Allowed (POST): /articles/"

Пример

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

from django.views.decorators.http import require_GET from django.shortcuts import render from myapp.models import Article @require_GET def search_articles(request): query = request.GET.get('q', '') if query: articles = Article.objects.filter(title__icontains=query) else: articles = Article.objects.none() return render(request, 'search.html', {'articles': articles, 'query': query})

Теперь если пользователь перейдет по URL /search/?q=django, представление обработает поиск и вернет результаты. Если же на этот URL отправить POST-запрос, будет возвращена ошибка 405:

"Method Not Allowed (POST): /search/"

Пример

Декоратор require_GET можно комбинировать с другими декораторами, например, с csrf_exempt для представлений, которые должны принимать GET-запросы без CSRF-защиты:

from django.views.decorators.http import require_GET from django.views.decorators.csrf import csrf_exempt from django.http import HttpResponse @csrf_exempt @require_GET def public_api(request): return HttpResponse("Public API data")

В этом случае представление будет доступно только для GET-запросов, но при этом CSRF-защита будет отключена. Обратите внимание на порядок декораторов: сначала csrf_exempt, затем require_GET.

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

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