Flask Vue.js全栈开发|第13章:喜欢文章

  • 原创
  • Madman
  • /
  • /
  • 0
  • 1366 次阅读

flask vuejs 全栈开发-min.png

Synopsis: 用户在浏览别人发布的文章时,可以将中意的文章添加到自己的 喜欢列表 中,以便于以后查看。同时,会发送动态通知给文章的作者,提醒有新用户喜欢了他的文章

代码已上传到 https://github.com/wangy8961/flask-vuejs-madblog/tree/v0.13 ,欢迎star

1 喜欢文章的用户列表

1. 数据库模型

用户收藏别人的文章,跟用户点赞别人的评论原理是完全一样的,所以是 多对多 关系

修改 back-end/app/models.py

# 喜欢文章
posts_likes = db.Table(
    'posts_likes',
    db.Column('user_id', db.Integer, db.ForeignKey('users.id')),
    db.Column('post_id', db.Integer, db.ForeignKey('posts.id')),
    db.Column('timestamp', db.DateTime, default=datetime.utcnow)
)


class User(PaginatedAPIMixin, db.Model):
    ...
    # 用户最后一次查看 收到的文章被喜欢 页面的时间,用来判断哪些喜欢是新的
    last_posts_likes_read_time = db.Column(db.DateTime)
    ...

    def new_posts_likes(self):
        '''用户收到的文章被喜欢的新计数'''
        last_read_time = self.last_posts_likes_read_time or datetime(1900, 1, 1)
        # 当前用户发布的文章当中,哪些文章被喜欢了
        posts = self.posts.join(posts_likes).all()
        # 新的喜欢记录计数
        new_likes_count = 0
        for p in posts:
            # 获取喜欢时间
            for u in p.likers:
                if u != self:  # 用户自己喜欢自己的文章不需要被通知
                    res = db.engine.execute("select * from posts_likes where user_id={} and post_id={}".format(u.id, p.id))
                    timestamp = datetime.strptime(list(res)[0][2], '%Y-%m-%d %H:%M:%S.%f')
                    # 判断本条喜欢记录是否为新的
                    if timestamp > last_read_time:
                        new_likes_count += 1
        return new_likes_count


class Post(PaginatedAPIMixin, db.Model):
    ...
    # 博客文章与喜欢/收藏它的人是多对多关系
    likers = db.relationship('User', secondary=posts_likes, backref=db.backref('liked_posts', lazy='dynamic'))
    ...

    def is_liked_by(self, user):
        '''判断用户 user 是否已经收藏过该文章'''
        return user in self.likers

    def liked_by(self, user):
        '''收藏'''
        if not self.is_liked_by(user):
            self.likers.append(user)

    def unliked_by(self, user):
        '''取消收藏'''
        if self.is_liked_by(user):
            self.likers.remove(
                                
                            
分类: Vue.js
标签: like API RESTful vuejs flask
  • 云集山人
  • jianjunwu
  • mullen00
  • 794754074
  • senjie
  • raojingpeng
  • fancyou
  • James
  • prior4007b
  • 王松
  • guozhengli
  • 小红
未经允许不得转载: LIFE & SHARE - 王颜公子 » Flask Vue.js全栈开发|第13章:喜欢文章

分享

作者

作者头像

Madman

如需 Linux / Python 相关问题付费解答,请按如下方式联系我

0 条评论

暂时还没有评论.