proxy_pool.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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. time_zone: Optional[str] = None
  15. status: Optional[str] = None
  16. # ================= Request Schemas =================
  17. class ProxyCreate(ProxyBase):
  18. """创建代理 Payload (直接继承 Base,复用所有必填规则)"""
  19. pass
  20. class ProxyUpdate(ProxyBase):
  21. """
  22. 更新代理 Payload
  23. 注意:因为是更新,前端可能只传部分字段,所以这里全部重新定义为 Optional
  24. """
  25. pool_name: Optional[str] = None
  26. proto: Optional[str] = None
  27. ip: Optional[str] = None
  28. port: Optional[int] = None
  29. username: Optional[str] = None
  30. password: Optional[str] = None
  31. next_use_time: Optional[datetime] = None
  32. time_zone: Optional[str] = None
  33. status: Optional[str] = None
  34. class GetNextIpPayload(BaseModel):
  35. """获取下个IP的请求参数"""
  36. pools: List[str]
  37. proxy_cd: int
  38. # ================= Response Schemas =================
  39. class ProxyOut(ProxyBase):
  40. """响应返回给前端的代理实体模型 (继承 Base,增加数据库自动生成的字段)"""
  41. id: int
  42. created_at: datetime
  43. updated_at: datetime
  44. model_config = {
  45. "from_attributes": True
  46. }