在Flask上用POST传递更多信息。

问题描述 投票:0回答:1

更新: 通过传入修正

<input type="hidden" id="commentID" name="commentID" value={{ comment.id }}>

并在我的表单里面检索值与。

commentID = request.form.get('commentID')

Original: 我对Flask完全是个初学者 所以请原谅这是一个愚蠢的问题。我正试图在Flask上添加更新评论的功能。

我确信这是一个不好的做法,但目前,我有一个帖子视图,它是使用你从url_for()给出的post_id参数来显示的。添加评论和写评论的表单都是内置在帖子路径中的(我很确定这不是一个好主意)。

@posts.route("/post/<int:post_id>", methods=['POST', 'GET'])
def post(post_id):
    post = Post.query.get_or_404(post_id)
    postForm = PostComment()
    editForm = PostComment()

    if editForm.validate_on_submit():
        commentID = request.form.get('comment')
        # comment = Comment.query.get_or_404(comment_id) # how do i get the comment id?
        comment.content = form.content.data
        db.session.commit()
        flash("Your comment has been updated successfully.", 'success')
        return redirect(url_for('posts.post', post_id=post.id))

    if postForm.validate_on_submit():
        comment = Comment(user_id=current_user.id, post_id=post_id, content=postForm.content.data)
        db.session.add(comment)
        db.session.commit()
        flash("Your comment has been posted successfully.", 'success')
        return redirect(url_for('posts.post', post_id=post.id))
    return render_template('posts/post.html', title=post.title, post=post, form=postForm, editForm=editForm)

我可以用这个路由很容易地添加评论,我也可以用另一个路由删除评论。然而,正如上面提到的,我也在尝试添加更新评论的功能。目前,在路径中我有两个表单,一个用于添加评论,另一个用于更新评论。因此,我试图以某种方式从模板中获取评论ID,使用数据库调用它,然后手动更改它。但是,我不太清楚如何获得数据库引用它的评论ID。

这是我的模板的一个片段。

<form method="POST" action="">
    {{ editForm.hidden_tag() }}
    <fieldset class="form-group">
    <div class="form-group">
        {{ editForm.content(class="form-control form-control-lg") }}
    </div>
    <div class="form-group">
        {{ editForm.submit(class="btn btn-outline-info") }}
    </div>
 </form>

如果有人能帮我解决这个问题,那将是非常感激的。另外,如果有谁能让我知道一种改进这种做法的方法(也许是一种为添加编辑评论创建单独路径的方法),那也会非常感激。

非常感谢。

python rest flask post
1个回答
1
投票

你的问题是,你没有发布一个行 id 在您的表格中。您说您的表格提交的是 {content': 'sdsds', 'submit': 'Comment, csrf: ...} 但这还不足以识别帖子。

你没有显示表单本身,但你应该添加一个隐藏的字段,并将其与 post.id. 这样一来,你就可以轻松地覆盖内容。

© www.soinside.com 2019 - 2024. All rights reserved.