from datetime import datetime from flask import session from main import db class Favorite(db.Model): __tablename__ = 'favorite' favoriteid = db.Column(db.Integer, primary_key=True) userid = db.Column(db.String(64), db.ForeignKey('user.userid')) articleid = db.Column(db.String(64), db.ForeignKey('article.articleid')) canceled = db.Column(db.Integer, nullable=False) # canceled 默认是0,不取消收藏 createtime = db.Column(db.DateTime, nullable=False) # 使用 DateTime 类型,并设置默认值为当前 UTC 时间 updatetime = db.Column(db.DateTime, nullable=False) # 插入收藏数据 # 每次收藏之前,先看一下之前是否收藏过,没有才插入,有的话直接更改cancled @classmethod def insert_favorite(cls,articleid): userid = session.get('userid') if Favorite.is_favorite(articleid): # 如果收藏存在 cls.query.filter_by(userid = userid, articleid = articleid).update({cls.canceled:0}) else: favorite = Favorite(userid = userid,articleid = articleid,canceled = 0,createtime=datetime.utcnow(),updatetime=datetime.utcnow()) db.session.add(favorite) try: db.session.commit() except Exception as e: print("收藏失败,文章id:", articleid, "错误:", e) return True # 取消收藏 @classmethod def cancel_favorite(cls,articleid): # 默认是已经收藏过的文章 userid = session.get('userid') cls.query.filter_by(userid=userid, articleid=articleid).update({cls.canceled: 1}) db.session.commit() return True # 判断是否收藏过 @classmethod def is_favorite(cls,articleid): userid = session.get('userid') result = cls.query.filter_by(articleid=articleid, userid=userid).first() if result is None: # 如果结果不存在 return False else: return True # 判断是否正在收藏 @classmethod def is_at_favorite(cls,articleid): userid = session.get('userid') result = cls.query.filter_by(articleid=articleid, userid=userid,canceled = 0).first() if result is None: # 如果结果不存在 return False else: return True