← Назад к вопросам
Для чего используются параметры запроса (query-параметры) в Django, FastAPI и других фреймворках?
1.2 Junior🔥 291 комментариев
#Django#FastAPI и Flask#REST API и HTTP
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Query-параметры в веб-фреймворках
Query-параметры (параметры строки запроса) — это переменные данные, передаваемые в URL адресе после символа ?. Они используются для фильтрации, сортировки и настройки поведения запроса.
Назначение query-параметров
Фильтрация данных:
GET /api/users?status=active— получить только активных пользователейGET /api/posts?author_id=123— посты конкретного автораGET /api/products?min_price=100&max_price=500— товары в диапазоне цен
Поиск:
GET /api/search?q=python&limit=10— поиск по ключевому словуGET /api/articles?tag=django— статьи с определённым тегом
Пагинация:
GET /api/posts?page=2&per_page=20— вторая страница с 20 элементамиGET /api/comments?offset=100&limit=50— с пропуском первых 100
Сортировка:
GET /api/products?sort=price&order=asc— сортировка по цене по возрастаниюGET /api/posts?sort=-created_at— новые посты первыми
Django: работа с query-параметрами
from django.shortcuts import render
from django.http import JsonResponse
from .models import Post
def post_list(request):
# Получение параметров запроса
page = request.GET.get("page", 1)
status = request.GET.get("status", "published")
sort_by = request.GET.get("sort", "-created_at")
# Фильтрация и сортировка
posts = Post.objects.filter(status=status).order_by(sort_by)
# Пагинация
from django.core.paginator import Paginator
paginator = Paginator(posts, 10)
page_obj = paginator.get_page(page)
return render(request, "posts/list.html", {"page_obj": page_obj})
request.GET — словарь-подобный объект, содержащий все параметры запроса:
def search(request):
query = request.GET.get("q") # Получить один параметр
filters = request.GET.getlist("tags") # Получить список значений
all_params = request.GET.dict() # Все параметры в виде словаря
# request.GET.get возвращает None, если параметра нет
limit = int(request.GET.get("limit", 20)) # Дефолтное значение
FastAPI: query-параметры
from fastapi import FastAPI, Query
from typing import Optional
app = FastAPI()
@app.get("/posts")
async def get_posts(
page: int = Query(1, ge=1),
limit: int = Query(20, ge=1, le=100),
status: str = Query("published"),
tags: list[str] = Query(None), # Несколько значений
):
# FastAPI автоматически парсит параметры с валидацией
return {
"page": page,
"limit": limit,
"status": status,
"tags": tags or [],
}
Query() детали:
ge=1— Greater than or Equal (минимальное значение)le=100— Less than or Equal (максимальное значение)- Автоматическая валидация типов и ограничений
- Документация в Swagger автоматическая
Flask: работа с параметрами
from flask import Flask, request
app = Flask(__name__)
@app.route("/api/posts")
def posts():
page = request.args.get("page", 1, type=int)
limit = request.args.get("limit", 20, type=int)
tags = request.args.getlist("tags") # Список значений
return {"page": page, "limit": limit, "tags": tags}
Лучшие практики
Валидация:
- Всегда проверяй типы и ограничения
- Устанавливай дефолтные значения
- Возвращай ошибку 400 для невалидных параметров
Безопасность:
- Никогда не доверяй входным данным
- Используй параметризованные запросы к БД
- Экранируй данные в HTML
Производительность:
- Ограничивай максимальный размер страницы (limit)
- Кэшируй результаты с одинаковыми параметрами
- Использование индексов в БД для часто фильтруемых полей
Query-параметры — стандартный способ передачи фильтров и опций в RESTful API и веб-приложениях.