_utils.py 737 B

1234567891011121314151617181920212223242526
  1. from __future__ import annotations
  2. from typing import Any, Dict, Tuple, Type, TypeVar
  3. from pydantic import BaseModel, ValidationError
  4. from quart import request
  5. T = TypeVar("T", bound=BaseModel)
  6. async def parse_json(model: Type[T]) -> Tuple[T, Dict[str, Any]]:
  7. """
  8. 解析 JSON 请求体并用 Pydantic 校验。
  9. Returns:
  10. (obj, raw_dict) 方便向下兼容:既能用模型字段,也可把原 dict 透传给旧代码。
  11. """
  12. raw = await request.get_json()
  13. raw = raw or {}
  14. obj = model.model_validate(raw)
  15. return obj, raw
  16. def validation_error_response(e: ValidationError) -> Tuple[Dict[str, Any], int]:
  17. return {"code": 400, "message": "invalid request body", "errors": e.errors()}, 400