Ответ
Query-параметры (параметры запроса) — это часть URL, идущая после знака ?, которая позволяет передавать на сервер данные в формате ключ=значение. Они не меняют сам маршрут (endpoint), а уточняют запрос к нему.
Основные сценарии использования:
- Фильтрация: Отбор данных по определенным критериям.
GET /api/products?category=electronics&in_stock=true - Сортировка: Указание поля и порядка сортировки.
GET /api/articles?sort_by=date&order=desc - Пагинация: Разделение большого объема данных на страницы.
GET /api/comments?page=2&limit=20 - Поиск: Передача поискового запроса.
GET /api/search?q=python+async
Пример реализации в FastAPI:
from fastapi import FastAPI
from typing import Optional
app = FastAPI()
# q - опциональный query-параметр
@app.get("/items/")
async def read_items(q: Optional[str] = None):
if q:
return {"search_query": q}
return {"items": ["Item1", "Item2"]}
Пример получения в Django:
from django.http import JsonResponse
def item_list(request):
# request.GET - это словарь с query-параметрами
# .get('q', None) безопасно извлекает значение или возвращает None
search_term = request.GET.get('q', None)
if search_term:
# Логика поиска по search_term...
return JsonResponse({"filtered_by": search_term})
# Логика для возврата всех элементов
return JsonResponse({"items": ["Item1", "Item2"]})
В отличие от параметров пути (path parameters), которые идентифицируют конкретный ресурс (например, /users/123), query-параметры модифицируют или уточняют запрос к коллекции ресурсов.
Ответ 18+ 🔞
Да ты посмотри, что за хуйня творится в этих ваших URL! Видишь этот вопросительный знак в конце адреса? Вот это, блядь, и есть вход в царство query-параметров. Это как в магазин зайти и сказать: «Дайте мне хлеба!» — а потом добавить: «А, и чёрного, нарезной, и чтоб вчерашний не был, ёпта!». Всё, что после «а» — это и есть query-параметры. Сам маршрут не меняется, но уточнения — овердохуища.
Ну и зачем эта пиздопроебина нужна?
-
Отфильтровать по-братски: Отсеять всё ненужное, как говно из проруби.
GET /api/products?category=electronics&in_stock=trueПеревод: «Дай мне электроники, но только ту, что на складе есть, а не ту, которую три года ждать!» -
Разложить по полочкам: Упорядочить, как шкаф с бельём.
GET /api/articles?sort_by=date&order=descПеревод: «Статьи мне подавай, но свежие сверху, а то древние манускрипты меня ебут!» -
Постранично, чтоб не сдохнуть: Не вываливать всё сразу, а порциями.
GET /api/comments?page=2&limit=20Перевод: «Комменты мне, но я на второй странице, и давай не больше двадцати, а то читать заебёшься!» -
Найти, блядь, нужное: Отправить в поиск свой запрос.
GET /api/search?q=python+asyncПеревод: «Ищи всё про асинхронный питон, а синхронный меня уже тошнит!»
Как это в FastAPI выглядит, ёпта?
from fastapi import FastAPI
from typing import Optional
app = FastAPI()
# q — это опциональный query-параметр. Может быть, а может и нихуя не быть.
@app.get("/items/")
async def read_items(q: Optional[str] = None):
if q:
return {"search_query": q}
return {"items": ["Item1", "Item2"]}
Смотри: если в запросе будет /items/?q=хренькакая, функция получит эту «хренькакую». Если нет — получит None, и похуй.
А в Django, эта старая, блядь, добрая бандура?
from django.http import JsonResponse
def item_list(request):
# request.GET — это, сука, словарь, где всё, что после `?`, лежит.
# .get('q', None) — это как аккуратно порыться в кармане: найдёшь ключ — хорошо, нет — вернёшь None, не устроив скандал.
search_term = request.GET.get('q', None)
if search_term:
# Тут уже твоя логика, ищи, не хочу.
return JsonResponse({"filtered_by": search_term})
# А если поискового запроса нет — просто отдаём всё подряд.
return JsonResponse({"items": ["Item1", "Item2"]})
И запомни разницу, а то мозги набекрень! Параметры пути (path params) — это как сказать «принеси мне вещь из комнаты №123». А query-параметры — это «принеси мне вещи из гостиной, но только красные, и на полке сверху, и чтоб не пыльные». Первое — конкретный ресурс, второе — уточнение к запросу на кучу ресурсов. Всё, я устал объяснять, в рот меня чих-пых!