2025-07-04 19:07:35 +08:00

51 lines
1.7 KiB
Python

"""
用户模型
"""
from datetime import datetime
from werkzeug.security import generate_password_hash, check_password_hash
from config.database import db # 确保从正确位置导入
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(50), unique=True, nullable=False)
phone = db.Column(db.String(20), unique=True)
email = db.Column(db.String(100), unique=True)
password_hash = db.Column(db.String(255), nullable=False)
nickname = db.Column(db.String(50))
avatar_url = db.Column(db.String(255))
gender = db.Column(db.Integer, default=0)
birthday = db.Column(db.Date)
status = db.Column(db.Integer, default=1)
wechat_openid = db.Column(db.String(100))
created_at = db.Column(db.DateTime, default=datetime.utcnow)
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
def set_password(self, password):
"""设置密码"""
self.password_hash = generate_password_hash(password)
def check_password(self, password):
"""验证密码"""
return check_password_hash(self.password_hash, password)
def to_dict(self):
"""转换为字典"""
return {
'id': self.id,
'username': self.username,
'phone': self.phone,
'email': self.email,
'nickname': self.nickname,
'avatar_url': self.avatar_url,
'gender': self.gender,
'birthday': self.birthday.isoformat() if self.birthday else None,
'status': self.status,
'created_at': self.created_at.isoformat() if self.created_at else None
}
def __repr__(self):
return f'<User {self.username}>'