API флеш-сообщений Flask

Механизм Flash используется для отображения одноразового сообщения обратной связи при следующем запросе; типичный сценарий — уведомления «операция успешна» или «ошибка ввода».

Flask сохраняет сообщения в Session и автоматически очищает их после прочтения.


Функция flash

Параметр Type Значение по умолчанию Описание
message str Обязательный Текст сообщения для отображения
category str "message" Категории сообщений, рекомендуемые значения: message, success, error, warning, info

Функция get_flashed_messages

Параметр Type Значение по умолчанию Описание
with_categories bool False Если True, возвращает список кортежей (category, message)
category_filter iterable () Возвращать только сообщения указанной категории
Возвращаемое значение Описание
with_categories=False Возвращает список текстов сообщений: ["msg1", "msg2"]
with_categories=True Возвращает список кортежей (category, message): [("success", "msg1"), ("error", "msg2")]

Использование в шаблонах

get_flashed_messages()Их можно вызывать прямо в шаблоне, без необходимости передавать через render_template.

Пример

<!-- Отобразить все flash-сообщения -->
{% with messages = get_flashed_messages(with_categories=true) %}
    {% if messages %}
        {% for category, message in messages %}
        <div class="flash-{{ category }}">{{ message }}</div>
        {% endfor %}
    {% endif %}
{% endwith %}

<!-- Отображать только сообщения об ошибках -->
{% for msg in get_flashed_messages(category_filter=["error"]) %}
    <div class="error">{{ msg }}</div>
{% endfor %}

Примеры кода

Пример

from flask import Flask, flash, get_flashed_messages, redirect, url_for, request

app = Flask(__name__)
app.secret_key = "secret"

@app.route("/post", methods=["GET", "POST"])
def create_post():
    if request.method == "POST":
        title = request.form.get("title", "").strip()
        if not title:
            flash("Заголовок не может быть пустым", "error")
        else:
            flash(f"Статья '{title}' успешно опубликована!", "success")
            return redirect(url_for("create_post"))
        return redirect(url_for("create_post"))
    # GET-запрос: получить и отобразить все сообщения
    messages = get_flashed_messages(with_categories=True)
    return render_template("post.html", messages=messages)

Флеш-сообщения хранятся в сессии, поэтому необходимо задать секретный ключSECRET_KEY. Сообщение видно только в следующем запросе после его прочтения, после чего автоматически очищается.

Другие расширения