user_data.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import bcrypt
  2. from datetime import datetime
  3. from typing import Optional
  4. class UserModel:
  5. def __init__(self,
  6. username: str,
  7. email: Optional[str] = None,
  8. phone: Optional[str] = None,
  9. name: Optional[str] = None,
  10. user_id: int = None,
  11. last_login: datetime = None,
  12. created_at: datetime = None,
  13. create_by: Optional[str] = None,
  14. update_by: Optional[str] = None,
  15. updated_at: datetime = None,
  16. delete_by: Optional[str] = None,
  17. deleted_at: datetime = None):
  18. self.id = user_id
  19. self.username = username
  20. self.email = email
  21. self.phone = phone
  22. self.name = name
  23. self._password = None
  24. self.last_login = last_login
  25. self.created_at = created_at or datetime.now()
  26. self.create_by = create_by
  27. self.update_by = update_by
  28. self.updated_at = updated_at
  29. self.delete_by = delete_by
  30. self.deleted_at = deleted_at
  31. def set_password(self, password: str):
  32. self._password = password
  33. def get_password(self) -> str:
  34. return self._password
  35. @staticmethod
  36. def _hash_password(password: str) -> bytes:
  37. salt = bcrypt.gensalt()
  38. return bcrypt.hashpw(password.encode('utf-8'), salt)
  39. def set_password_hash(self, password: str):
  40. if not password:
  41. raise ValueError("密码不能为空")
  42. self._password = self._hash_password(password)
  43. def verify_password(self, password: str) -> bool:
  44. if not self._password:
  45. return False
  46. return bcrypt.checkpw(password.encode('utf-8'), self._password.encode('utf-8')) # 确保 _password 为字节类型
  47. def update_last_login(self):
  48. self.last_login = datetime.now()
  49. def to_dict(self) -> dict:
  50. return {
  51. 'id': self.id,
  52. 'username': self.username,
  53. 'name': self.name,
  54. 'email': self.email,
  55. 'phone': self.phone,
  56. 'last_login': self.last_login.strftime('%Y-%m-%d %H:%M:%S') if self.last_login else None,
  57. 'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S') if self.created_at else None,
  58. 'create_by': self.create_by,
  59. 'update_by': self.update_by,
  60. 'updated_at': self.updated_at.strftime('%Y-%m-%d %H:%M:%S') if self.updated_at else None,
  61. 'delete_by': self.delete_by,
  62. 'deleted_at': self.deleted_at.strftime('%Y-%m-%d %H:%M:%S') if self.deleted_at else None
  63. }