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 %}
{% 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)
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。消息仅在读取它的下一次请求中可见,之后自动清除。
