显示文章下所有评论以及评论的回复
思路:
1.获取前端传来的文章id
2.根据文章id获取文章下的所有评论
3.获取所有的一级评论(对文章的评论)
4.根据一级评论,获取所有的二级评论(对一级评论的回复)
5.若有回复,将回复内容等相关信息嵌套到一级评论的信息中
6.若没有回复,只返回一级评论内容
返回的数据格式如下:
{
"nid":nid,
'comments':[
{
"cid": 1,
"content": '我冲突皮哦按来的',
'user_info":{
'uid':1,
'name':'张三',
'img':''
},
"child_comments":[
{
"cid": 1,
"content": '我冲突皮哦按来的',
'user_info":{
'uid':1,
'name':'张三',
'img':''
},
},
....
]
}
.....
]
}
"""
代码实现如下:
def get(self):
parser = reqparse.RequestParser()
parser.add_argument('source')
args = parser.parse_args()
nid = args['source']
print("文章的id", nid)
# 获取文章的一级评论
comment = Comment.query.filter_by(article_id=nid, parent_id=None).all()
if not comment:
return jsonify(msg="暂无评论", code=200, data=[])
# 获取以及评论的用户信息
list1 = []
for i in comment:
user = UserModel.query.filter_by(uid=i.user_id).first()
# 获取一级品论下的评论数量
reply_count = len(Comment.query.filter_by(parent_id=i.cmid).all())
# 对评论数量进行修改
try:
Comment.query.filter_by(cmid=i.cmid).update({"reply_count": reply_count})
db.session.commit()
except Exception as e:
print("修改品论数量报错", e)
c1 = marshal(i, comment_fields)
c1['reply_count'] = reply_count # 更新响应的评论数量
if user:
c1['uname'] = user.uname
c1['photo'] = user.profile_photo
# 获取二级评论
comment2 = Comment.query.filter_by(parent_id=i.cmid).all()
list2 = []
if not comment2:
list2 = None
else:
for j in comment2:
user = UserModel.query.filter_by(uid=i.user_id).first()
c2 = marshal(j, comment_fields)
c2['uname'] = user.uname
c2['photo'] = user.profile_photo
list2.append(c2)
c1['parent'] = list2
list1.append(c1)
return jsonify(msg="获取成功", code=200, data=list1)
成功获取所有评论