You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
2.3 KiB

4 months ago
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