CaiYouHui后端fastapi实现

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. # app/models/user.py
  2. from sqlalchemy import Column, Integer, String, Boolean, DateTime, Text
  3. from sqlalchemy.sql import func
  4. # 从database.py导入Base(确保是DeclarativeBase)
  5. from app.database import Base
  6. class User(Base):
  7. __tablename__ = "users"
  8. id = Column(Integer, primary_key=True, index=True)
  9. username = Column(String(50), unique=True, index=True, nullable=False)
  10. email = Column(String(100), unique=True, index=True, nullable=False)
  11. hashed_password = Column(String(255), nullable=False)
  12. full_name = Column(String(100))
  13. avatar = Column(String(255))
  14. # 用户状态
  15. is_active = Column(Boolean, default=True)
  16. is_verified = Column(Boolean, default=False)
  17. is_superuser = Column(Boolean, default=False)
  18. is_locked = Column(Boolean, default=False)
  19. # 个人信息
  20. full_name = Column(String(100), nullable=True)
  21. phone = Column(String(20), nullable=True)
  22. avatar = Column(Text, nullable=True)
  23. # 时间戳
  24. created_at = Column(DateTime(timezone=True), server_default=func.now())
  25. updated_at = Column(DateTime(timezone=True), onupdate=func.now())
  26. last_login = Column(DateTime, nullable=True)
  27. last_password_change = Column(DateTime, nullable=True)
  28. # 安全相关
  29. failed_login_attempts = Column(Integer, default=0)
  30. verification_token = Column(String(255), nullable=True)
  31. verification_token_expires = Column(DateTime, nullable=True)
  32. reset_token = Column(String(255), nullable=True)
  33. reset_token_expires = Column(DateTime, nullable=True)
  34. def __repr__(self):
  35. return f"<User {self.username}>"