搜尋

首頁  >  問答  >  主體

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

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

PHP中文网PHP中文网2817 天前774

全部回覆(3)我來回復

  • 怪我咯

    怪我咯2017-04-18 09:43:56

    微博這種叫做單頁應用(SPA),前後端分離透過api傳遞資料。
    只想仿評論效果,就是用你自己的答案,ajax提交後端api,保存後回調修改頁面,wtform基本上是擺設,沒關係了。

    回覆
    0
  • 迷茫

    迷茫2017-04-18 09:43:56

    最好把你的程式碼一起貼一下。

    下面是我的建議

    當你發表評論時,你肯定做的是提交表單,但是你需要在提交表單後面的重定向裡面,讓網站知道你剛才做的是評論
    所以,在你提交完以後的重定向裡面,你可以加上一個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,這個時候,在下面的評論頁面(分頁顯示的話),就會直接顯示到最後一頁你的評論那裡了
    不知道我這樣說的話你是否清楚。

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-18 09:43:56

    使用Websocket吧,網站上了規模總有適用於websocket的情形,單頁應用的話倒不是必須的。

    回覆
    0
  • 取消回覆