关于评论点赞的两个问题
来源:11-22 评论点赞功能

慕无忌King
2019-05-07
- 对于评论的点赞,同一个用户对同一个评论的点赞处理,如果已经对这个评论点赞了,当再次点赞时,应该是取消点赞。
所以,这里的逻辑,应该是先判断用户是否对当前评论点赞过。这里我的代码稍微处理了一下,还请老师看一下是否合理
@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循环,对评论数据和点赞做匹配,如果,评论的数据包含在点赞的数据中,就去修改新增字段的值。
但是这样处理,如果数据量大的话,会不会效率慢。请老师斧正
写回答
1回答
-
第一个问题: 点赞之后再次点赞是否取消点赞,这个其实是业务的需求,从开发的角度上来讲没有应该不应该的说法,就像很多网站或者app是不支持取消点赞的,如果要取消点赞的话你这里的后端逻辑没有问题
一个用户是否对一个评论点赞过,CommentLike已经给出了用户的id和对应的comment的id了,只要这里能通过user的id和comment的id查询出记录来就证明已经点赞过了,你是否想设计成:只要给改评论下的任何一个回复点了?那么就代表这个用户已经对这个评论点赞过了? 如果这样设计的话你有没有想过合理性是否合理呢?
012019-05-08
相似问题