Python Flask не удаляет правильное сообщение с заданным заголовком сообщения из базы данных SQLAlchemy

#python #html #flask

#python #HTML #flask

Вопрос:

Я пытаюсь удалить сообщение из базы данных SQLAlchemy в flask, захватив сообщение, используя заголовок сообщения.

Однако, похоже, что удаляется первая строка в таблице post вместо удаления фактического сообщения, которое я намеревался удалить.

Вот маршрут удаления сообщения:

 @post.route('/admin_delete_post/<post_title>', methods=['POST'])
def delete_post(post_title):
    from mysite import db
    from mysite.models import Post
    post = Post.query.filter_by(title=post_title).first()
    if post:
        db.session.delete(post)
        db.session.commit()
        flash('Post has been deleted successfuly!', 'danger')
        return redirect(url_for('main.home'))
    else:
        abort(404)
 

вот html-код:

 {% extends 'layout.html' %}
{% block content %}
       {% for post in posts %}
           {% if current_user.is_authenticated %}
            ..............
            ..............
         <!-- Button trigger modal -->
         <button style="display: inline; float: left; margin-right: 10px;" type="button" class="btn btn-danger" data-toggle="modal" data-target="#exampleModal">
           Delete this post
          </button>

          <!-- Modal -->
          <div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
            <div class="modal-dialog" role="document">
              <div class="modal-content">
                <div class="modal-header">
                  <h5 class="modal-title" id="exampleModalLabel">Warning!</h5>
                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">amp;times;</span>
                  </button>
                </div>
                <div class="modal-body">
                  Are you sure to delete this post?
                </div>
                <div class="modal-footer">
                  <button type="button" class="btn btn-primary" data-dismiss="modal">No</button>
                  <form style="float: right; margin-left: 10px;" action="{{ url_for('post.delete_post', post_title=post.title) }}" method="post">
                    <input class="btn btn-danger" type="submit" value="Delete">
                  </form>
                </div>
              </div>
            </div>
          </div>


          <a href="{{ url_for('post.edit_post', post_title=post.title) }}">
            <button style="display: inline; float: left;" type="button" class="btn btn-primary">
              Edit this post
            </button>
          </a>

      </div>
   <!-- Blog Post End -->
   {% endfor %}
 

Комментарии:

1. Не могли бы вы опубликовать код на своем mysite? Мне кажется, что действие происходит там. Поэтому нам нужно это увидеть, чтобы ответить на ваш вопрос.

2. Для начала вы можете попробовать отправить HTTP-запрос POST на конечную точку и посмотреть, что произойдет. Вы можете использовать curl для этого, если вы используете Linux. Кроме того, не могли бы вы распечатать переменную post_title . Я подозреваю, что это не строка, а скорее словарь. Спасибо!

3. Как вы можете видеть в маршруте delete_post, он не имеет формы, отличной от той, которая уже была встроена в приведенный выше HTML-код, который отвечает за действие удаления …

4. <стиль формы=»float: right; margin-left: 10px;» действие =»{{ url_for(‘post.delete_post’, post_title=post.title) }}» метод =»post»> <входной класс =»btn btn-опасность» тип =»отправить» значение=»Удалить»> </form>