Атрибут GET

Атрибут GET класса HttpRequest предоставляет доступ к параметрам, переданным через URL-строку запроса. Данный атрибут является объектом типа QueryDict, который ведет себя как словарь, но с возможностью хранения нескольких значений для одного ключа. GET-параметры обычно используются для фильтрации, сортировки или передачи небольших объемов данных между страницами.

Синтаксис

pythonrequest.GET.get(key, default=None)
request.GET.getlist(key, default=None)
request.GET.items()
request.GET.keys()
request.GET.values()

Для получения значения параметра используется метод get, который принимает ключ и опционально значение по умолчанию. Если параметр может иметь несколько значений, применяется метод getlist.

Пример . Получение одного параметра

Рассмотрим пример получения параметра 'page' из GET-запроса:

pythonfrom django.http import HttpResponse

def my_view(request):
  page = request.GET.get('page', 1)
  return HttpResponse(f"Current page: {page}")

Результат выполнения кода при запросе к URL '/my-view/?page=5':

python"Current page: 5"

Пример . Получение нескольких значений

В некоторых случаях GET-параметр может передаваться несколько раз. Для получения всех значений используется метод getlist:

pythonfrom django.http import HttpResponse

def my_view(request):
  categories = request.GET.getlist('category')
  if categories:
    return HttpResponse(f"Selected categories: {', '.join(categories)}")
  else:
    return HttpResponse("No categories selected")

Результат выполнения кода при запросе '/my-view/?category=books&category=movies':

python"Selected categories: books, movies"

Пример . Работа со словарем GET-параметров

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

pythonfrom django.http import HttpResponse

def my_view(request):
  res = []
  for key, value in request.GET.items():
    res.append(f"{key}: {value}")
  return HttpResponse("<br>".join(res))

Результат выполнения кода при запросе '/my-view/?q=python&sort=asc':

python"q: python"
"sort: asc"

Пример . Использование в фильтрации данных

GET-параметры часто применяются для фильтрации записей в базе данных. Рассмотрим пример фильтрации по параметру 'status':

pythonfrom django.http import HttpResponse
from myapp.models import Article

def article_list(request):
  status = request.GET.get('status')
  articles = Article.objects.all()
  if status:
    articles = articles.filter(status=status)
  res = [article.title for article in articles]
  return HttpResponse(f"Articles: {res}")

Результат выполнения кода при запросе '/articles/?status=published':

python"Articles: ['First article', 'Second article']"

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

  • атрибут POST,
    который содержит данные, переданные методом POST
  • атрибут method,
    который определяет HTTP-метод запроса
  • декоратор require_GET,
    который ограничивает доступ только для GET-запросов
  • класс QueryDict,
    который описывает объект для работы с параметрами запроса