Flask: Удаление и обновление записей в базе данных

Удаление записи

Создадим функционал удаления записи из базы данных. Кнопка удаления, аналогичная кнопке на странице со списком постов, будет перенаправлять пользователя на страницу вида /post/<id>/delete. <id> – динамический параметр, идентификатор удаляемой записи. Слово delete (или любое другое) используется для различения этого URL от URL просмотра статьи. Кнопка будет иметь класс btn btn-danger (красная кнопка) и текст «Удалить». Также добавим кнопку редактирования с классом btn btn-success (зелёная кнопка) и текстом «Редактировать», перенаправляющую на страницу вида /post/<id>/update.

Обработка удаления происходит в главном файле приложения. Функция post_delete принимает параметр <id> из URL. Для работы с базой данных используется функция get_or_404, возвращающая запись по ID или ошибку 404, если запись не найдена.

# ... код ...
try:
    post = get_or_404(Post, id=id)
    db.session.delete(post)
    db.session.commit()
    return redirect(url_for('post'))
except:
    return render_template('post.html', error='При удалении статьи произошла ошибка')

Функция находит запись, пытается её удалить и выполнить commit. В случае успеха происходит перенаправление на страницу со списком статей. В случае ошибки выводится сообщение.

Редактирование записи

Страница редактирования доступна по URL вида /post/<id>/update через кнопку «Редактировать». Функция обработки этого URL похожа на функцию добавления новой записи.

# ... код ...
@app.route('/post/<int:id>/update', methods=['GET', 'POST'])
def post_update(id):
    # ... код ...

Функция post_update принимает id записи из URL. Для отображения формы редактирования используется шаблон post_update.html, похожий на шаблон добавления статьи, но с полями, заполненными данными из базы данных через объект article.

<form method="POST">
    <input type="text" name="title" value="{{ article.title }}">
    <textarea name="intro">{{ article.intro }}</textarea>
    <textarea name="text">{{ article.text }}</textarea>
    <button type="submit">Обновить</button>
</form>

В функции post_update запись находится по ID. При POST-запросе значения из формы подставляются в найденный объект, и база данных обновляется с помощью db.session.commit(). В случае ошибки выводится сообщение.

# ... код ...
post = get_or_404(Post, id=id)

if request.method == 'POST':
    post.title = request.form['title']
    post.intro = request.form['intro']
    post.text = request.form['text']
    try:
        db.session.commit()
        return redirect(url_for('post'))
    except:
        return render_template('post_update.html', article=post, error='При редактировании статьи произошла ошибка')
# ... код ...

Условие отсутствия статей

В шаблон post.html добавлено условие, выводящее сообщение «У вас еще нет статей на сайте», если статей нет. Проверка количества статей осуществляется по длине переменной articles.

{% if articles|length > 0 %}
    <!-- код вывода статей -->
{% else %}
    <p>У вас еще нет статей на сайте</p>
{% endif %}

Реализованы функционалы удаления и обновления статей, а также добавлено сообщение об отсутствии статей.

Что будем искать? Например,программа