/
liquid-g
/
liquid-code
Обзор
Документация
Войти
/
liquid-g
/
liquid-code
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/liquidcode/middleware/body_parser.py
47 строк
2 KB
User
ci: настроен Black и flake8 для автоматического форматирования кода
04 июл 2026, 08:14
04 июл 2026, 08:14
4778ed6
Код
Авторство
О чём код?
""" Middleware для парсинга тела запроса (JSON, form-data). """ import json from typing import Any, Callable, Dict from ..contracts import Request, Response from .base import Middleware class BodyParserMiddleware(Middleware): """ Автоматически парсит тело запроса в зависимости от Content-Type. Результат сохраняется в request как атрибут 'parsed_body'. """ def __call__( self, request: Request, call_next: Callable[[Request], Response] ) -> Response: headers = request.get_headers() content_type = headers.get("Content-Type", "") body = request.get_body() parsed_body = None if body: if "application/json" in content_type: try: parsed_body = json.loads(body.decode("utf-8")) except json.JSONDecodeError: parsed_body = None elif "application/x-www-form-urlencoded" in content_type: # Простейший парсинг form-urlencoded try: from urllib.parse import parse_qs parsed_body = parse_qs(body.decode("utf-8")) parsed_body = {k: v[0] if v else "" for k, v in parsed_body.items()} except Exception: parsed_body = None # Можно добавить multipart/form-data, но это сложнее # Сохраняем результат в атрибут запроса request.set_attr("parsed_body", parsed_body) return call_next(request)