- 对于评论的点赞,同一个用户对同一个评论的点赞处理,如果已经对这个评论点赞了,当再次点赞时,应该是取消点赞。
所以,这里的逻辑,应该是先判断用户是否对当前评论点赞过。这里我的代码稍微处理了一下,还请老师看一下是否合理
@authenticated_async
async def post(self, comment_id):
re_data = {}
objects = self.application.objects
try:
comment = await objects.get(
PostComment, id=int(comment_id)
)
# 查询当前用户是否对当前评论点过赞
# 如果已经点赞了,则取消点赞
comment_like = await objects.get(
CommentLike, user=self.current_user,
post_comment_id=comment_id
)
comment.like_nums -= 1
await objects.update(comment)
await objects.delete(comment_like)
re_data['code'] = 200
re_data['msg'] = 'cancel like'
except PostComment.DoesNotExist as e:
re_data['code'] = 201
re_data['msg'] = "comment does not exists"
except CommentLike.DoesNotExist as e:
# 没有点赞,则做 点赞处理
comment_like = await objects.create(
CommentLike, user=self.current_user,
post_comment=comment
)
comment.like_nums += 1
await objects.update(comment)
re_data['code'] = 200
re_data['msg'] = 'like success'
self.finish(re_data)
- 第二个问题。就是我们在浏览网站时,点赞的图标会根据当前用户是否对当前评论点赞过,给出不同的状态。例如微博。用户点赞的微博和没有点赞的微博。那个点赞的图标的状态是不一样的。
当,服务器返回评论的列表数据时,根据当前用户返回的评论列表中,如何包含,此用户已经点赞的评论呢。这里我想了一下,尚未用代码实现。
首先,给评论的数据模型添加一个字段,来标识此用户是否对这个评论做出过点赞。然后取得所有的评论列表,再根据用户id查找到所有点赞的数据。然后通过for循环,对评论数据和点赞做匹配,如果,评论的数据包含在点赞的数据中,就去修改新增字段的值。
但是这样处理,如果数据量大的话,会不会效率慢。请老师斧正