1. 表间结构分析及模型类准备
表间结构示意图:
模型类准备:
在info文件夹中存储着我们的所有的业务逻辑,所以,我们可以在info中新建一个名为models.py的python文件,用于存储模型类定义的相关代码。
在models.py中放入下面的代码
from datetime importdatetimefrom werkzeug.security importgenerate_password_hash, check_password_hashfrom info importconstantsfrom . importdbclassBaseModel(object):"""模型基类,为每个模型补充创建时间与更新时间"""create_time= db.Column(db.DateTime, default=datetime.now) #记录的创建时间
update_time = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now) #记录的更新时间
#用户收藏表,建立用户与其收藏新闻多对多的关系
tb_user_collection =db.Table("info_user_collection",
db.Column("user_id", db.Integer, db.ForeignKey("info_user.id"), primary_key=True), #新闻编号
db.Column("news_id", db.Integer, db.ForeignKey("info_news.id"), primary_key=True), #分类编号
db.Column("create_time", db.DateTime, default=datetime.now) #收藏创建时间
)
tb_user_follows=db.Table("info_user_fans",
db.Column('follower_id', db.Integer, db.ForeignKey('info_user.id'), primary_key=True), #粉丝id
db.Column('followed_id', db.Integer, db.ForeignKey('info_user.id'), primary_key=True) #被关注人的id
)classUser(BaseModel, db.Model):"""用户"""
__tablename__ = "info_user"id= db.Column(db.Integer, primary_key=True) #用户编号
nick_name = db.Column(db.String(32), unique=True, nullable=False) #用户昵称
password_hash = db.Column(db.String(128), nullable=False) #加密的密码
mobile = db.Column(db.String(11), unique=True, nullable=False) #手机号
avatar_url = db.Column(db.String(256)) #用户头像路径
last_login = db.Column(db.DateTime, default=datetime.now) #最后一次登录时间
is_admin = db.Column(db.Boolean, default=False)
signature= db.Column(db.String(512)) #用户签名
gender = db.Column( #性别
db.Enum("MAN", #男
"WOMAN" #女
),
default="MAN")#当前用户收藏的所有新闻
collection_news = db.relationship("News", secondary=tb_user_collection, lazy="dynamic") #用户收藏的新闻
#用户所有的粉丝,添加了反向引用followed,代表用户都关注了哪些人
followers = db.relationship('User',
secondary=tb_user_follows,
primaryjoin=id ==tb_user_follows.c.followed_id,
secondaryjoin=