response.py 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. """统一响应格式"""
  2. from typing import Any, Generic, Optional, TypeVar, List
  3. from pydantic import BaseModel, Field
  4. T = TypeVar("T")
  5. class ResponseModel(BaseModel, Generic[T]):
  6. """通用响应格式"""
  7. code: int = 200
  8. message: str = "success"
  9. data: Optional[T] = None
  10. timestamp: int = 0
  11. class Config:
  12. from_attributes = True
  13. class PageResult(BaseModel, Generic[T]):
  14. """分页响应格式"""
  15. items: List[T] = Field(default_factory=list, serialization_alias="list")
  16. total: int = 0
  17. page: int = 1
  18. pageSize: int = 10
  19. totalPages: int = 0
  20. def success_response(data: Any = None, message: str = "success") -> dict:
  21. """成功响应"""
  22. from datetime import datetime
  23. return {
  24. "code": 200,
  25. "message": message,
  26. "data": data,
  27. "timestamp": int(datetime.now().timestamp() * 1000)
  28. }
  29. def error_response(code: int = 400, message: str = "error", data: Any = None) -> dict:
  30. """错误响应"""
  31. from datetime import datetime
  32. return {
  33. "code": code,
  34. "message": message,
  35. "data": data,
  36. "timestamp": int(datetime.now().timestamp() * 1000)
  37. }