Атрибут GET
Атрибут GET класса HttpRequest предоставляет доступ к параметрам, переданным через URL-строку запроса. Данный атрибут является объектом типа QueryDict, который ведет себя как словарь, но с возможностью хранения нескольких значений для одного ключа. GET-параметры обычно используются для фильтрации, сортировки или передачи небольших объемов данных между страницами.
Синтаксис
request.GET.get(key, default=None)
request.GET.getlist(key, default=None)
request.GET.items()
request.GET.keys()
request.GET.values()
Для получения значения параметра используется метод get, который принимает ключ и опционально значение по умолчанию. Если параметр может иметь несколько значений, применяется метод getlist.
Пример . Получение одного параметра
Рассмотрим пример получения параметра 'page' из GET-запроса:
from 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':
"Current page: 5"
Пример . Получение нескольких значений
В некоторых случаях GET-параметр может передаваться несколько раз. Для получения всех значений используется метод getlist:
from 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':
"Selected categories: books, movies"
Пример . Работа со словарем GET-параметров
Атрибут GET поддерживает стандартные методы словарей, что позволяет перебирать все переданные параметры:
from 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':
"q: python"
"sort: asc"
Пример . Использование в фильтрации данных
GET-параметры часто применяются для фильтрации записей в базе данных. Рассмотрим пример фильтрации по параметру 'status':
from 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':
"Articles: ['First article', 'Second article']"
Смотрите также
-
атрибут
POST,
который содержит данные, переданные методом POST -
атрибут
method,
который определяет HTTP-метод запроса -
декоратор
require_GET,
который ограничивает доступ только для GET-запросов -
класс
QueryDict,
который описывает объект для работы с параметрами запроса