python - Flask如何仿制微博评论发表的效果

 糖在嘴里甜在心离_636 发布于 2022-10-28 00:50

我想仿制微博评论的效果,就是发表评论之后,用户可以实时看见自己发的评论。
我尝试了使用重定向return redirect('main.index'),可是这样的话,并不能聚焦到原来那条微博的评论列表下面。
想请教下:
1.如果想发表评论后用户能实时看见自己发表的评论,那么在Flask的路由中return语句应该怎么写?
2.这种情况是否应该用ajax来解决??如果是的话,使用jQuery怎么与wtforms渲染的表单配合使用呢?

3 个回答
  • 使用Websocket吧,网站上了规模总有适用于websocket的情形,单页应用的话倒不是必须的。

    2022-10-29 09:05 回答
  • 最好把你的代码一起贴一下。

    下面是我的建议

    当你发表评论时,你肯定做的是提交表单,但是你需要在提交表单后面的重定向里面,让网站知道你刚才做的是评论
    所以,在你提交完以后的重定向里面,你可以加一个page=-1进去
    请看下面例子

    @main.route('/post/<int:id>')
    def post(id):
        post = Post.query.get_or_404(id)
        form = CommentForm()
        if form.validate_on_submit():
            comment = Comment(body = form.body.data, post = post, author = current_user._get_current_object())
            db.session.add(comment)
            flash('Your comment has been published.')
            return redirect(url_for('.post',id = post.id, page = -1))
        page = request.args.get('page',1,type=int)
        if page == -1:
            page = (post.comments.count()-1)//current_app.config['FLASKY_COMMENTS_PER_PAGE']+1
            pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(
                page,per_page = current_app.config['FLASKY_COMMENTS_PER_PAGE'],
                error_out = False)
            comments = pagination.items
        return render_template('post.html',posts=[post],form = form,comments=comments,pagination = pagination)    

    里面代码的page是用来作为分页显示用的,你可以理解为url里面指向第几页的参数
    当他提交完表单以后,做的是重定向return redirect(url_for('.post',id = post.id, page = -1))
    并且,url_for是可以带**kwargs的,这样,你的请求里面就带有一个page=-1
    下面语句当 page == -1时,他通过计算(现有有评论总数)除以(每页显示的评论数),计算出最后一页的页数是几

    并重新赋值给page,这个时候,在下面的评论页面(分页显示的话),就会直接显示到最后一页你的评论那里了
    不知道我这样说的话你是否清楚。

    2022-10-29 09:07 回答
  • 微博这种叫做单页应用(SPA),前后端分离通过api传递数据。
    只想仿评论效果,就是用你自己的答案,ajax提交后端api,保存后回调修改页面,wtform基本是摆设,没关系了。

    2022-10-29 09:15 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有