Flask Vue.js全栈开发|第12章:黑名单

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

flask vuejs 全栈开发-min.png

Synopsis: 实现用户屏蔽其它用户,阻止对方给自己发送骚扰私信,这个功能还是有必要的,毕竟网络骚扰和暴力危害挺大的,眼不见为净

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

1. 数据库模型

一个用户可以 拉黑/屏蔽 多个其它用户,一个用户也可以被多个其它用户拉黑,所以是 自引用多对多 关系

修改 back-end/app/models.py

# 黑名单(user_id 屏蔽 block_id)
blacklist = db.Table(
    'blacklist',
    db.Column('user_id', db.Integer, db.ForeignKey('users.id')),
    db.Column('block_id', db.Integer, db.ForeignKey('users.id')),
    db.Column('timestamp', db.DateTime, default=datetime.utcnow)
)


class User(PaginatedAPIMixin, db.Model):
    ...
    # harassers 骚扰者(被拉黑的人)
    # sufferers 受害者
    harassers = db.relationship(
        'User', secondary=blacklist,
        primaryjoin=(blacklist.c.user_id == id),
        secondaryjoin=(blacklist.c.block_id == id),
        backref=db.backref('sufferers', lazy='dynamic'), lazy='dynamic')
    ...
    def is_blocking(self, user):
        '''判断当前用户是否已经拉黑了 user 这个用户对象,如果拉黑了,下面表达式左边是1,否则是0'''
        return self.harassers.filter(
            blacklist.c.block_id == user.id).count() > 0

    def block(self, user):
        '''当前用户开始拉黑 user 这个用户对象'''
        if not self.is_blocking(user):
            self.harassers.append(user)

    def unblock(self, user):
        '''当前用户取消拉黑 user 这个用户对象'''
        
                                
                            
未经允许不得转载: LIFE & SHARE - 王颜公子 » Flask Vue.js全栈开发|第12章:黑名单

分享

作者

作者头像

Madman

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

0 条评论

暂时还没有评论.