Метод get

Метод get является одним из основных методов класса View в Django. Он вызывается фреймворком при поступлении GET-запроса на URL, связанный с представлением. Метод принимает объект запроса и дополнительные аргументы, переданные из URL, и должен возвращать объект ответа. Обычно этот метод используется для отображения страниц, получения данных из базы данных и передачи их в шаблон. Если метод не переопределен в классе-наследнике, он вызывает исключение NotAllowed, так как базовый класс не знает, как обрабатывать GET-запросы по умолчанию.

Параметры

Метод get принимает следующие параметры:

Синтаксис

pythonfrom django.http import HttpResponse
from django.views import View

class MyView(View):
  def get(self, request, *args, **kwargs):
    # логика обработки GET-запроса
    return HttpResponse("Ответ")

Пример . С параметрами из URL

Рассмотрим обработку GET-запроса с параметрами, переданными через URL-паттерн:

pythonfrom django.http import HttpResponse
from django.views import View

class ArticleView(View):
  def get(self, request, article_id, *args, **kwargs):
    # article_id - параметр из URL
    html = f"<h1>Статья №{article_id}</h1>"
    return HttpResponse(html)

В этом примере метод обрабатывает GET-запрос и возвращает HTML-страницу с номером статьи, переданным из URL.

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

Чаще всего метод get используется для рендеринга шаблонов с контекстными данными:

pythonfrom django.shortcuts import render
from django.views import View
from myapp.models import Article

class ArticleListView(View):
  def get(self, request, *args, **kwargs):
    articles = Article.objects.all()
    context = {"articles": articles}
    return render(request, "articles/list.html", context)

Результат выполнения кода:

python"Страница со списком всех статей"

Пример . Обработка GET-параметров

Метод позволяет обрабатывать GET-параметры из строки запроса, например, параметры фильтрации или поиска:

pythonfrom django.shortcuts import render
from django.views import View
from myapp.models import Article

class ArticleSearchView(View):
  def get(self, request, *args, **kwargs):
    # Получаем параметр 'q' из GET-запроса
    search_query = request.GET.get("q", "")
    if search_query:
      articles = Article.objects.filter(title__icontains=search_query)
    else:
      articles = Article.objects.all()
    context = {
      "articles": articles,
      "search_query": search_query,
    }
    return render(request, "articles/search.html", context)

Результат выполнения кода при запросе с параметром ?q=django:

python"Найдено статей с 'django' в заголовке: 5"

Пример . Переопределение метода get

При создании класса-представления метод get переопределяется для реализации нужной логики. Если метод не переопределен, класс вызовет исключение:

pythonfrom django.views import View

class MyEmptyView(View):
  # Метод get не переопределен
  pass

При попытке обратиться к такому представлению будет вызвано исключение:

python"django.core.exceptions.NotAllowed: Method Not Allowed (GET): /"

Пример . С проверкой типа запроса

Метод может использоваться совместно с другими HTTP-методами, например, для проверки разрешенных типов запросов:

pythonfrom django.http import HttpResponse, HttpResponseNotAllowed
from django.views import View

class MyView(View):
  def get(self, request, *args, **kwargs):
    return HttpResponse("GET-запрос обработан")

  def post(self, request, *args, **kwargs):
    return HttpResponse("POST-запрос обработан")

  def http_method_not_allowed(self, request, *args, **kwargs):
    return HttpResponseNotAllowed(["GET", "POST"])

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

  • метод as_view,
    который преобразует класс в функцию для использования в URL-паттернах
  • метод dispatch,
    который определяет, какой HTTP-метод будет вызван на основе типа запроса
  • метод post,
    который обрабатывает POST-запросы в классе View
  • класс TemplateView,
    который предоставляет готовую реализацию метода get для рендеринга шаблонов