blob: f27e7d33034fa8485543bdab408d976e6b12ead3 [file] [log] [blame] [edit]
# models/user.py
from datetime import datetime
from extensions import db
# 关联表:用户关注关系
follows = db.Table(
'follows',
db.Column('follower_id', db.Integer, db.ForeignKey('users.id', ondelete='CASCADE'), primary_key=True),
db.Column('followee_id', db.Integer, db.ForeignKey('users.id', ondelete='CASCADE'), primary_key=True),
db.Column('created_at', db.DateTime, default=datetime.utcnow, nullable=False)
)
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(50), unique=True, nullable=False)
password = db.Column(db.String(255), nullable=False)
email = db.Column(db.String(100), unique=True, nullable=False)
avatar = db.Column(db.String(255))
role = db.Column(db.Enum('user', 'admin'), default='user', nullable=False)
bio = db.Column(db.String(255))
status = db.Column(db.Enum('active', 'banned', 'muted'), default='active', nullable=False)
created_at = db.Column(db.DateTime, default=datetime.utcnow, nullable=False)
updated_at = db.Column(
db.DateTime,
default=datetime.utcnow,
onupdate=datetime.utcnow,
nullable=False
)
# 用户发布的帖子
posts = db.relationship(
'Post',
backref='author',
lazy='dynamic',
cascade='all, delete-orphan'
)
# 用户的互动行为
behaviors = db.relationship(
'Behavior',
backref='user',
lazy='dynamic',
cascade='all, delete-orphan'
)
# 用户发表的评论
comments = db.relationship(
'Comment',
backref='user',
lazy='dynamic',
cascade='all, delete-orphan'
)
# 用户关注的对象列表
following = db.relationship(
'User',
secondary=follows,
primaryjoin=(id == follows.c.follower_id),
secondaryjoin=(id == follows.c.followee_id),
backref=db.backref('followers', lazy='dynamic'),
lazy='dynamic'
)
def __repr__(self):
return f"<User {self.username!r} id={self.id}>"