Flask Vue.js全栈开发|第12章:黑名单
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 这个用户对象''' if self.is_blocking(user): self.harassers.remove(user)
未经允许不得转载: LIFE & SHARE - 王颜公子 » Flask Vue.js全栈开发|第12章:黑名单
0 条评论
评论者的用户名
评论时间暂时还没有评论.