现在位置: 首页 > Flask 教程 > 正文

Flask Message Flashing API

消息闪现(Flash)机制用于在下一次请求中显示一次性反馈消息,典型场景是「操作成功」或「输入错误」提示。

Flask 将消息存储在 Session 中,读取后自动清除。


flash 函数

参数 类型 默认值 说明
message str 必填 要显示的消息文本
category str "message" 消息分类,推荐值:message、success、error、warning、info

get_flashed_messages 函数

参数 类型 默认值 说明
with_categories bool False 为 True 时返回 (category, message) 元组列表
category_filter iterable () 只返回指定分类的消息
返回值 说明
with_categories=False 返回消息文本列表:["msg1", "msg2"]
with_categories=True 返回分类+消息元组列表:[("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)

Flash 消息存储在 Session 中,因此必须设置 SECRET_KEY。消息仅在读取它的下一次请求中可见,之后自动清除。