Удаление статей из базы данных сайта на Flask

Чтобы иметь возможность удалять статьи, добавим в шаблон еще одну кнопку. Причем обособим ее в отдельную форму.

{% if path %}
  <form action="{{ url_for('delete', address=path) }}" method="POST">
    <input type="submit" value="Удалить статью"
            onclick="return confirm('Точно удалить?')">
  </form>
{% endif %}

Мы могли бы вызвать функцию удаления через onclick, но так как удаление ‒ важное действие, желательно чтобы пользователь подтвердил свои намерения, поэтому в onclick мы вставляем вызов js-функции confirm, а функцию удаления вызываем через атрибут action.

Атрибуту action формы присваивается адрес, на который происходит перенаправление после отправки формы. Когда этого атрибута нет, то возвращается сама страница (такой вариант используется в первой форме).

Обособление формы удаления в if выполнено для того, чтобы на главной странице не было кнопки удаления. Она там не нужна.

Функция delete будет выглядеть так:

@app.route('/del/<path:address>', methods=('POST',))
def delete(address):
    con = sqlite3.connect(db_name)
    id, title = con.execute('SELECT id, h1 FROM articles WHERE path=?',
                            (address,)).fetchone()
    con.execute('DELETE FROM articles WHERE id = ?', (id,))
    con.execute('DELETE FROM dates WHERE content = ?', (id,))
    con.commit()
    con.close()
    flash('Статья "{}" была удалена!'.format(title), 'success')
    return redirect(url_for('index'))

Не забываем, что кроме самой статьи надо удалить все связанные с ней даты.

Мы не создаем отдельный шаблон для адреса удаления, так как при безошибочной работе функции никогда не перейдем на страницу по этому адресу. Вместо этого выполняется редирект на главную страницу.

Flask для начинающих




Все разделы сайта