class Friend(db.Model): """ 好友/关注 """ __tablename__ = 'friend' id = db.Column(db.Integer, primary_key=True) from_user_id = db.Column(db.Integer, db.ForeignKey('user.id')) to_user_id = db.Column(db.Integer, db.ForeignKey('user.id')) status = db.Column(db.Enum(FriendEnum)) created_at = db.Column(db.DateTime) def __repr__(self): return '<Friend %r>' % self.id
class Comment(db.Model): """ 评论 """ __tablename__ = 'comment' id = db.Column(db.Integer, primary_key=True) content = db.Column(db.String(160), nullable=False) is_valid = db.Column(db.Boolean, default=True) created_at = db.Column(db.DateTime) weibo_id = db.Column(db.Integer, db.ForeignKey('weibo.id')) user_id = db.Column(db.Integer, db.ForeignKey('user.id')) def __repr__(self): return '<Weibo %r>' % self.name
class Role(db.Model): """ 角色 """ __tablename__ = 'role' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(80), nullable=False) perms = db.Column(db.Enum(PermsEnum)) is_valid = db.Column(db.Boolean, default=True) created_at = db.Column(db.DateTime) updateed_at = db.Column(db.DateTime) user_id = db.Column(db.Integer, db.ForeignKey('user.id')) #这一句话非常重要 def __repr__(self): return '<Role %r>' % self.name
class Weibo(db.Model): """ wb """ __tablename__ = 'weibo' id = db.Column(db.Integer, primary_key=True) content = db.Column(db.String(160), nullable=False) is_valid = db.Column(db.Boolean, default=True) created_at = db.Column(db.DateTime) user_id = db.Column(db.Integer, db.ForeignKey('user.id')) #又是外键 at_users = db.relationship('WeiboAtUser', backref='weibo') rel_topics = db.relationship('WeiboRelTopic', backref='weibo') comments = db.relationship('Comment', backref='weibo', lazy='dynamic') def get_comments_count(self): """ 获取评论次数 """ return self.comments.count() def get_content(self): """ 替换@和话题 """ content = self.content # 替换@ def replace_at(match_obj): return '<a href="%s">%s</a>' % (url_for( 'user_detail', nickname=match_obj.group(1)), match_obj.group(0)) content = re.sub(constants.AT_USER_PATTEN, replace_at, content) # 替换话题 def replace_topic(match_obj): return '<a href="%s">%s</a>' % (url_for( 'topic_detail', name=match_obj.group(1)), match_obj.group(0)) content = re.sub(constants.TOPIC_PATTEN, replace_topic, content) return content def __repr__(self): return '<Weibo %r>' % self.content
class WeiboRelTopic(db.Model): """ wb讨论话题 """ __tablename__ = 'weibo_rel_topic' id = db.Column(db.Integer, primary_key=True) weibo_id = db.Column(db.Integer, db.ForeignKey('weibo.id')) topic_id = db.Column(db.Integer, db.ForeignKey('topic.id'))
class WeiboAtUser(db.Model): """ wb@用户 """ __tablename__ = 'weibo_at_user' id = db.Column(db.Integer, primary_key=True) weibo_id = db.Column(db.Integer, db.ForeignKey('weibo.id')) user_id = db.Column(db.Integer, db.ForeignKey('user.id'))