Метод get
Метод get является одним из основных методов класса View в Django. Он вызывается фреймворком при поступлении GET-запроса на URL, связанный с представлением. Метод принимает объект запроса и дополнительные аргументы, переданные из URL, и должен возвращать объект ответа. Обычно этот метод используется для отображения страниц, получения данных из базы данных и передачи их в шаблон. Если метод не переопределен в классе-наследнике, он вызывает исключение NotAllowed, так как базовый класс не знает, как обрабатывать GET-запросы по умолчанию.
Параметры
Метод get принимает следующие параметры:
request- обязательный параметр, содержащий объектHttpRequestс данными о текущем запросе.*args,**kwargs- необязательные параметры, содержащие аргументы и именованные аргументы, переданные из URL-паттерна.
Синтаксис
from django.http import HttpResponse
from django.views import View
class MyView(View):
def get(self, request, *args, **kwargs):
# логика обработки GET-запроса
return HttpResponse("Ответ")
Пример . С параметрами из URL
Рассмотрим обработку GET-запроса с параметрами, переданными через URL-паттерн:
from 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 используется для рендеринга шаблонов с контекстными данными:
from 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)
Результат выполнения кода:
"Страница со списком всех статей"
Пример . Обработка GET-параметров
Метод позволяет обрабатывать GET-параметры из строки запроса, например, параметры фильтрации или поиска:
from 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:
"Найдено статей с 'django' в заголовке: 5"
Пример . Переопределение метода get
При создании класса-представления метод get переопределяется для реализации нужной логики. Если метод не переопределен, класс вызовет исключение:
from django.views import View
class MyEmptyView(View):
# Метод get не переопределен
pass
При попытке обратиться к такому представлению будет вызвано исключение:
"django.core.exceptions.NotAllowed: Method Not Allowed (GET): /"
Пример . С проверкой типа запроса
Метод может использоваться совместно с другими HTTP-методами, например, для проверки разрешенных типов запросов:
from 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 для рендеринга шаблонов