一、闪现的用途
在 Flask 中,“闪现消息”(Flash Messages)是一种用于在不同请求之间传递一次性消息的机制。这在 Web 应用中非常实用,特别是在需要向用户展示短暂的通知、错误消息或者确认信息时。
1、闪现的用途
-
用户反馈:在用户提交表单后,告诉用户操作成功或失败,比如“提交成功”或“登录失败”。
-
跨请求传递信息:由于 HTTP 请求是无状态的,闪现消息为在不同请求间传递临时信息提供了一种便捷方式。
-
通知:提示用户关于系统状态或需要注意的内容。
2、闪现的本质
闪现消息基于会话(Session)机制实现。它在应用程序的请求中存储消息,通常只在下次请求中有效。具体来说,它利用会话存储在服务器端的数据在不同请求之间保持用户状态。
当使用 flash
函数时,Flask 将消息存储在当前会话中。而在下一个请求中,您可以通过 get_flashed_messages
函数检索这些消息。因为消息被设置为一次性,所以在检索后会自动删除,确保不会在后续请求中重复出现。
3、小案例
flash('name提交成功!') 存消息
get_flashed_messages() 取消息
from flask import Flask, flash, render_template, redirect, url_for, get_flashed_messages app = Flask(__name__) app.secret_key = 'your_secret_key' # 必须设置以支持会话 @app.route('/') def index(): return render_template('index.html') @app.route('/submit', methods=['POST']) def submit(): # 假设在此处理表单提交 # 成功处理后闪现一条消息 flash('表单提交成功!') return redirect(url_for('index')) @app.route('/display') def display(): messages = get_flashed_messages() return render_template('display.html', messages=messages) if __name__ == '__main__': app.run()
html页面
# index <!doctype html> <html> <head> <title>闪现消息示例</title> </head> <body> <form action="{{ url_for('submit') }}" method="post"> <input type="text" name="name" placeholder="输入名字"> <input type="submit" value="提交"> </form> </body> </html> # display <!doctype html> <html> <head> <title>显示消息</title> </head> <body> {% with messages = get_flashed_messages() %} {% if messages %} <ul> {% for message in messages %} <li>{{ message }}</li> {% endfor %} </ul> {% endif %} {% endwith %} </body> </html>
4、设置分类取出
from flask import Flask, flash, render_template, redirect, url_for, get_flashed_messages app = Flask(__name__) app.secret_key = 'your_secret_key' @app.route('/submit') def submit(): flash('信息已成功提交!', 'success') flash('发生一个警告!', 'warning') return redirect(url_for('display')) @app.route('/display') def display(): return render_template('display.html') if __name__ == '__main__': app.run(debug=True, port=5001)
html 页面
<!doctype html> <html> <head> <title>显示消息</title> </head> <body> {% with messages = get_flashed_messages(with_categories=True) %} {% if messages %} <ul> {% for category, message in messages %} <li class="{{ category }}">{{ message }}</li> {% endfor %} </ul> {% endif %} {% endwith %} </body> </html> <style> .success { color: green; } .warning { color: orange; } .error { color: red; } </style>
补充:
Flask 提供了 flash()
和 get_flashed_messages()
函数来帮助在网页重定向后传递简短的消息。get_flashed_messages()
通常用于在模板中获取这些消息进行展示。
下面是对 {% with messages = get_flashed_messages(with_categories=True) %}
的详细介绍:
基本功能
-
**
get_flashed_messages()
**:- 这个函数用于从 Flask 的消息系统中检索已存储的消息。这些消息是通过
flash()
函数添加的。 - 该函数有两个主要参数:
with_categories
: 布尔值。如果设置为True
,则返回消息时包含类别信息。category_filter
: 可选的列表参数,允许您检索特定类别的消息。
- 这个函数用于从 Flask 的消息系统中检索已存储的消息。这些消息是通过
-
**
with_categories=True
**:- 当设置为
True
时,get_flashed_messages()
返回一个包含类别和消息内容的元组列表。 - 这意味着每条消息将以
(category, message)
的形式返回,使您可以在模板中根据类别对消息进行不同的处理(例如不同的样式)。
- 当设置为
使用 {% with %}
控制结构
- **
{% with ... %}
**:这是一种 Jinja2 模板的控制结构,用于临时存储一个变量,以便在模板的一部分中使用。 - 在
{% with messages = get_flashed_messages(with_categories=True) %}
中,with
语句将get_flashed_messages()
的结果分配给变量messages
。 - 这样做的目的是在同一个模板块内高效地访问并处理这些消息,而不需要多次调用
get_flashed_messages()
。
标签:__,get,闪现,falsk,messages,flashed,消息,app From: https://www.cnblogs.com/dgp-zjz/p/18525669