CaiYouHui后端fastapi实现

user.py 1.5KB

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