python - Flask如何仿制微博评论发表的效果
PHP中文网
PHP中文网 2017-04-18 09:41:56
0
3
767

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

PHP中文网
PHP中文网

认证0级讲师

répondre à tous(3)
刘奇

Weibo est appelé une application à page unique (SPA). Le front-end et le back-end sont séparés et les données sont transférées via l'API.
Je veux juste imiter l'effet de commentaire, c'est-à-dire utiliser votre propre réponse, soumettre l'API back-end avec ajax et rappeler pour modifier la page après l'enregistrement. Le wtform n'est fondamentalement qu'une décoration, donc ce n'est pas le cas. ça n'a pas d'importance.

迷茫

Il est préférable de publier votre code ensemble.

Voici mes suggestions

Lorsque vous laissez un commentaire, vous devez soumettre le formulaire, mais vous devez informer le site Web que ce que vous venez de faire était un commentaire dans la redirection après le formulaire de soumission
Donc, après avoir soumis la redirection. Dans l'orientation, vous pouvez ajouter une page=-1
Veuillez voir l'exemple ci-dessous

@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)    

La page dans le code à l'intérieur est utilisée pour l'affichage de la pagination. Vous pouvez la comprendre comme le paramètre dans l'URL qui pointe vers la page
Après avoir soumis le formulaire, ce qu'il fait est de rediriger return redirect(url_for(. '.post',id = post.id, page = -1))
Et, url_for peut apporter **kwargs, donc votre demande contiendra une page=-1
L'instruction suivante est utilisée comme page Quand == -1, il calcule le nombre de pages sur la dernière page en divisant (le nombre total de commentaires existants) par (le nombre de commentaires affichés sur chaque page)

Et réaffectez-le à la page. A ce moment, sur la page de commentaire ci-dessous (s'il est affiché en pagination), votre commentaire sera affiché directement sur la dernière page
Je ne sais pas si vous comprenez ce que j'ai dit. .

Ty80

Utilisez Websocket. L'échelle du site Web est toujours adaptée à Websocket. Elle n'est pas nécessaire pour les applications d'une seule page.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal