Передайте дополнительную информацию с помощью POST на Flask - PullRequest
0 голосов
/ 25 мая 2020

ОБНОВЛЕНИЕ : исправлено путем передачи

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

и получения значения внутри моей формы с помощью:

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

Оригинал: Я полный новичок в Flask, так что простите меня, если это глупый вопрос. Я пытаюсь добавить функционал для обновления комментария к Flask.

Я уверен, что это плохая практика, но в настоящее время у меня есть представление сообщения, которое отображается с использованием аргумента post_id, который вы указываете из url_for (). Формы как для добавления комментария, так и для написания комментария встроены в сам маршрут публикации (почти уверен, что это не лучшая идея).

@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)
* 1015 удалите и комментарии другим путем. Однако, как упоминалось выше, я также пытаюсь добавить функцию обновления комментария. В настоящее время у меня есть две формы в маршруте: одна для добавления комментария, а другая для обновления комментария. Итак, я пытаюсь каким-то образом получить идентификатор комментария из шаблона, вызвать его с помощью базы данных, а затем вручную изменить его. Однако я не слишком уверен, как получить commentID для базы данных, чтобы ссылаться на него.

Вот фрагмент моего шаблона:

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

Если бы кто-нибудь мог помочь мне решить эту проблему, я был бы очень признателен. Кроме того, если бы кто-нибудь мог сообщить мне способ улучшить эту практику (возможно, метод создания отдельных маршрутов для добавления / редактирования комментариев), это тоже было бы очень признательно.

Большое спасибо.

1 Ответ

1 голос
/ 26 мая 2020

Проблема в том, что вы не публикуете строку id в своей форме. Вы заявили, что ваша форма отправляет {content': 'sdsds', 'submit': 'Comment, csrf: ...}, но этого недостаточно для идентификации сообщения.

Вы не отображали саму форму, но вам следует добавить скрытое поле с post.id. Таким образом, вы можете легко перезаписать контент.

...