proxy_pool.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from pydantic import BaseModel, Field
  2. from typing import Optional, List
  3. from datetime import datetime
  4. # ================= Base Schema =================
  5. class ProxyBase(BaseModel):
  6. """代理基础共享属性,定义核心字段及校验规则"""
  7. pool_name: str
  8. proto: str
  9. ip: str
  10. port: int
  11. username: Optional[str] = None
  12. password: Optional[str] = None
  13. next_use_time: Optional[datetime] = None
  14. status: Optional[str] = None
  15. # ================= Request Schemas =================
  16. class ProxyCreate(ProxyBase):
  17. """创建代理 Payload (直接继承 Base,复用所有必填规则)"""
  18. pass
  19. class ProxyUpdate(ProxyBase):
  20. """
  21. 更新代理 Payload
  22. 注意:因为是更新,前端可能只传部分字段,所以这里全部重新定义为 Optional
  23. """
  24. pool_name: Optional[str] = None
  25. proto: Optional[str] = None
  26. ip: Optional[str] = None
  27. port: Optional[int] = None
  28. username: Optional[str] = None
  29. password: Optional[str] = None
  30. next_use_time: Optional[datetime] = None
  31. status: Optional[str] = None
  32. class GetNextIpPayload(BaseModel):
  33. """获取下个IP的请求参数"""
  34. pools: List[str]
  35. proxy_cd: int
  36. # ================= Response Schemas =================
  37. class ProxyOut(ProxyBase):
  38. """响应返回给前端的代理实体模型 (继承 Base,增加数据库自动生成的字段)"""
  39. id: int
  40. created_at: datetime
  41. updated_at: datetime
  42. model_config = {
  43. "from_attributes": True
  44. }