Flask框架flash消息闪现学习与优化符合闪现之名

Flask新手注册系统实战:从零实现邮箱验证与密码安全存储 Web注册系统是理解HTTP请求生命周期、表单处理与数据持久化的经典入门场景。其核心原理在于服务端接收用户输入、执行多层校验(格式、业务规则、唯一性)、安全哈希密码并持久化至数据库。技术价值体现在可控的安全实践——如手动SQL参数化防注入、bcrypt显式盐值管理、SQLite事务异常捕获,避免ORM抽象带来的认知盲区。典型应用场景包括MVP产品冷启动、教学沙盒环境搭建及全栈基础能力验证。本文以Flask+SQLite+原生SQL为技术栈,聚焦邮箱验证、密码二次确认与错误反馈等关键环节,还原真实新手从‘写不 阅读详情
端正态度

随着公众号文章更新的数量越来越多,有一些陌生的朋友了解到了清风Python。有关注公众号的读者、有添加微信一起讨论python的朋友,还有申请转载和让投稿与兼职线下培训答疑的机构。感谢大家的支持,但还是想在这里说明下,做公众号的初衷是总结日常学习的内容,将公众号做成变相的博客。目的是能督促自己一周七天除了周五晚上,都能安心的学习。逆水行舟不进则退,希望大家坚持每天所有学有所获。

Flask的flash

第一次知道Flask有flash这个功能时,听着名字就觉得高端,==消息闪现==...是跳刀闪烁躲技能的top10操作吗?可结果让我好失望,那里有什么闪现的效果,不过是平常的消息传输与展示罢了。那么今天我就带着大家在学习flash功能的基础上,增加闪现效果!

flash介绍

好的应用和用户界面的重点是回馈。如果用户没有得到足够的反馈,他们可能最终会对您的应用产生不好的评价。
Flask 提供了一个非常简单的方法来使用闪现系统向用户反馈信息。
闪现系统使得在一个请求结束的时候记录一个信息,然后在且仅仅在下一个请求中访问这个数据。这通常配合一个布局模板实现

以上内容来自Flask官方文档,对flash的说明http://docs.jinkan.org/docs
这几句话你只需记住两点即可:

  • 一个请求结束时记录
  • 仅仅在下一个请求中访问
关于介绍的误解

flash介绍中说了,在一个请求结束时记录flash,然后仅仅在下一个请求中访问。此处的下一个请求,不是任意的请求,而是下一次获取flash内容的请求。
来看一个例子:

# -*- coding: utf-8 -*-
# @Author   : 王翔
# @JianShu  : 清风Python
# @Date     : 2019/7/14 22:36
# @Software : PyCharm
# @version  :Python 3.7.3
# @File     : demo.py

from flask import Flask, flash, get_flashed_messages

app = Flask(__name__)
app.secret_key = 'not guess'

@app.route('/')
def index():
    flash("add flash -- hello Flask")
    return "<h3> Add Flash </h3>"

@app.route('/hello')
def hello():
    return "<h3> Hello World </h3>"

@app.route('/read')
def read():
    return "<h3> %s </h3>" % get_flashed_messages()

if __name__ == '__main__':
    app.run(port=5001)

这段代码我就不使用html模板渲染的,只是通过这个例子让大家先对flash有一个初步的认识。实现效果如下:

5847426-1b25f67ae069057d.gif
flash初探.gif

首次访问 http://127.0.0.1:5001,我们添加了flash,之后的下一个请求,我们去访问了一个hello的uri,此时我们简单返回了helloworld,那么此时的flash是否还存在?接下来我们去访问了read的uri,读取到了flash的内容,然后再次访问read去读取flash的时候已经为空了...
所以,不要被flash官网中说的 仅仅在下一次请求给误解了,应该是 仅仅在下一次获取flash的请求中获取。再次访问时清空,那么flash的实现方式是什么呢?其实很简单...

flash实现原理

flash的实现原理,其实就是简单的在浏览器中添加session与删除session这么简单,具体如何操作的呢?
flash 方法:

def flash(message, category='message'):
    flashes = session.get('_flashes', [])
    flashes.append((category, message))
    session['_flashes'] = flashes
    message_flashed.send(current_app._get_current_object(),
                         message=message, category=category)

get_flashed_messages 方法:

def get_flashed_messages(with_categories=False, category_filter=[]):
    flashes = _request_ctx_stack.top.flashes
    if flashes is None:
        _request_ctx_stack.top.flashes = flashes = session.pop('_flashes') \
            if '_flashes' in session else []
    if category_filter:
        flashes = list(filter(lambda f: f[0] in category_filter, flashes))
    if not with_categories:
        return [x[1] for x in flashes]
    return flashes

其他的内容你都可以忽略,只要关注两点即可:
flashes = session.get('_flashes', []) ; flashes.append((category, message))
session.pop('_flashes')
这么看是不一目了然,flash的时候给session中塞入一个_flashes的list,然后开始append,get_flashed_messages的时候把session中的_flashes pop出来,即达到了最终的请求结束前设置,仅供下一次获取flash时使用...
那么既然看了源码,大家肯定注意到一个category的参数,这个是用来干嘛的?

category参数操作

flash消息既然是用于消息闪现,必然有好消息、坏消息与默认消息,系统默认的category='message',那么如果我们将category设置为其他类型呢?
比如flash('用户名或密码错误...', category='error'),那么我们在模板中针对flash可以做些什么事情?

分类展示

get_flashed_messages(with_categories=true)
with_categories=true代表我们启用消息分类,之后针对消息类型,可以进行相关的过滤操作

{% with messages = get_flashed_messages(with_categories=true) %}
  {% if messages %}
    <ul class=flashes>
    {% for category, message in messages %}
      <li class="{{ category }}">{{ message }}</li>
    {% endfor %}
    </ul>
  {% endif %}
{% endwith %}
过滤消息

get_flashed_messages(category_filter=["error"]

{% with errors = get_flashed_messages(category_filter=["error"]) %}
{% if errors %}
<div class="alert-message block-message error">
  <a class="close" href="#">×</a>
  <ul>
    {%- for msg in errors %}
    <li>{{ msg }}</li>
    {% endfor -%}
  </ul>
</div>
{% endif %}
{% endwith %}

这个就比较简单了,为message添加一个过滤器,在日常中,我们完全可以重写自己的方法...

综合例子

介绍了这么多,我们来设计一个案例,简单的用户登录界面,如果用户输入的用户名密码错误,则显示错误消息,如果用户登录成功则跳转页面,并欢迎一下小盆友。因为登录和跳转页面都需要使用到flash,则创建一个base.html的模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>BreezePython</title>
</head>
<body>
{% block info %}{% endblock %}
{% with messages = get_flashed_messages(with_categories=true) %}
  {% if messages %}
    <ul class=flashes>
    {% for category, message in messages %}
        {% if category =='error'%}
            <li style="color:red">{{ message }}</li>
        {% else %}
            <li style="color:green">{{ message }}</li>
        {% endif %}
    {% endfor %}
    </ul>
  {% endif %}
{% endwith %}
</body>
</html>

之后分别在登录和欢迎页面引入该模板...
login.html:

{% extends "base.html" %}
{% block info %}
<h2>欢迎登陆系统</h2>
<form action="" method=post>
    <dl>
      <dt>用户名:
      <dd><input type=text name=username value="{{
          request.form.username }}">
      <dt>密码:
      <dd><input type=password name=password>
    </dl>
    <p><input type=submit value=Login>
  </form>
{% endblock %}

index.html

{% extends "base.html" %}
{% block info %}
<h2>恭喜 {{user}} ,您已登陆!</h2>
{% endblock %}

然后创建app.py进行调度:

# -*- coding: utf-8 -*-
# @Author   : 王翔
# @JianShu  : 清风Python
# @Date     : 2019/7/14 23:17
# @Software : PyCharm
# @version  :Python 3.7.3
# @File     : app.py

from flask import Flask, flash, redirect, render_template, \
    request, url_for

app = Flask(__name__)
app.secret_key = 'not guess'


@app.route('/', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        if request.form['username'] != 'qingfeng' or \
                request.form['password'] != 'python':
            flash('用户名或密码错误...', category='error')
            flash('上点心再输入一次...', category='error')
        else:
            flash('登陆成功', category='info')
            return render_template('index.html', user=request.form['username'])
    return render_template('login.html')


if __name__ == "__main__":
    app.run()

实现效果如下:


5847426-b0559559f076de96.gif
flash消息实例.gif

我们在base.html中针对不同类型的消息进行了颜色的过滤,为了让大家了解flash其实是一个列表,所以添加了两条错误信息。
希望这个实例能让大家对flash有进一步的了解。

flash如何闪现?

为了可以让flash真的如何闪现之名,我们应该让flash消息,出现跳刀闪烁消失的效果,如何来做?简单的使用jQuery即可!只需两行代码
base.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>BreezePython</title>
</head>
<body>
{% block info %}{% endblock %}
<div class="flash">
{% with messages = get_flashed_messages(with_categories=true) %}
  {% if messages %}
    <ul class=flashes>
    {% for category, message in messages %}
        {% if category =='error'%}
            <li style="color:red">{{ message }}</li>
        {% else %}
            <li style="color:green">{{ message }}</li>
        {% endif %}
    {% endfor %}
    </ul>
  {% endif %}
{% endwith %}
</div>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<script>$(".flash").fadeOut(3000);</script>
</body>
</html>

我们通过jQuery自带的fadeOut动画效果,即可达到我们的闪现的效果:

5847426-505ede454d2508d6.gif
flash闪现之名.gif

这才符合flash的之名啊....

The End

今天的flask框架flash消息闪现就带大家学习到这里,如果觉得内容对你有所帮助,可以点击文章右下角的“在看”。
欢迎将这篇文章或我的微信公众号【==清风Python==】分享给更多喜欢python的人,谢谢。

Flask-Login实战避坑指南:Vue前后端分离下的登录态管理 Flask-Login是Python Web开发中用于用户会话管理的基础认证扩展,其核心原理是通过session绑定用户ID并配合user_loader回调实现请求级身份识别。它不处理密码校验或Token生成,而是专注‘已验证用户’在多次HTTP请求中的状态延续,技术价值在于轻量、可插拔且深度适配Flask上下文机制。典型应用场景包括图书管理系统、内部后台、教育平台等需角色隔离的B端应用;尤其在Flask与Vue前后端分离架构中,必须协同配置SameSite=None、Secure Cookie、withC 阅读详情

相关推荐

【黑马程序员 6节课入门Flask框架web开发视频】基础入门

视频内容来自哔哩哔哩黑马程序员

问就ycy的博客 865

flask中flash(闪现)的使用

我们有时候在一个页面存储了一些信息,然后需要在另一个页面使用,这个时候就需要使用flash,其实从应用需求角度来看session也能完成上面的需求,其实flash就是对session的封装,它的底层实现其实也是session。 首先我们看下flash 和 get_flashed_message这两个函数的源码 def flash(message, category="message")...

梦回故里 6595

详解Flask Flash Message(消息闪现)

Flask 提供 flash() 用于向 用户传递临时消息,通常用于: • 表单提交成功或失败 • 用户登录、注册、退出提醒 • 系统通知(如权限不足、错误信息)

u013039977的博客 602

Flask-11 消息闪现flash

消息闪现 一个好的应用和用户界面都需要良好的反馈。如果用户得不到足够的反馈,那么应用 最终会被用户唾弃。 Flask 的闪现系统提供了一个良好的反馈方式。闪现系统的基 本工作方式是:在且只在下一个请求中访问上一个请求结束时记录的消息。一般我们 结合布局模板来使用闪现系统。注意,浏览器会限制 cookie 的大小,有时候网络服 务器也会。这样如果消息比会话 cookie 大的话,那么会导致消息闪现静默失败。 ---->> 来自官方文档 文档:https://dormousehole.readt

xy_best_的博客 1423

Flask 学习-65.消息闪现 flash

一个好的应用和用户界面都需要良好的反馈。如果用户得不到足够的反馈,那么应用 最终会被用户唾弃。 Flask 的闪现系统提供了一个良好的反馈方式。闪现系统的基 本工作方式是:在且只在下一个请求中访问上一个请求结束时记录的消息。

qq_27371025的博客 903

(十四)Flask之闪现flash

(十四)Flask之闪现flash

孤寒者的博客 2万+

flask之flash用法

保姆级教程,实操有效

qq_66129888的博客 1056

从T型结到Wilkinson:5分钟搞懂功分器选型指南(附最新射频测试数据对比)

本文通过对比T型结、电阻型和Wilkinson三种功分器的核心原理与实测数据,提供了清晰的射频功分器选型指南。文章结合最新的2.4GHz ISM频段测试数据,分析了插入损耗、回波损耗和端口隔离度等关键指标,并针对窄带物联网、射频测试及合成系统等不同应用场景,给出了具体的选型建议和实战提醒,帮助工程师根据系统需求做出最优决策。

bush的博客 305

Flask之flash闪现的介绍(原理,作用)

一、介绍Flask工作原理: from flask import Flask, flash, get_flashed_messages app = Flask(__name__) app.secret_key = 'flash_key' @app.route('/get') def get(): data = get_flashed_messages() ''' # g...

我愿做一个聆听者,以学习为伴! 2852

从防御者视角复盘:用WinArpAttacker和Wireshark在Windows上模拟并检测ARP欺骗攻击

本文详细解析了Windows平台下的ARP欺骗攻击与防御策略,通过WinArpAttacker和Wireshark工具模拟攻击并检测异常流量。文章涵盖实验环境搭建、攻击原理深度解析、流量特征分析及企业级防御方案,帮助安全运维人员全面掌握ARP攻击检测与防护技术。

weixin_30918633的博客 121

西工大noj100题python2024第一季1-10

【代码】西工大noj100题python2024第一季1-10。

weixin_70523540的博客 1800

Flask框架flash消息闪现学习与优化符合闪现之名#华为云·寻找黑马程序员#

端正态度 随着公众号文章更新的数量越来越多,有一些陌生的朋友了解到了清风Python。有关注公众号的读者、有添加微信一起讨论python的朋友,还有申请转载和让投稿与兼职线下培训答疑的机构。感谢大家的支持,但还是想在这里说明下,做公众号的初衷是总结日常学习的内容,将公众号做成变相的博客。目的是能督促自己一周七天除了周五晚上,都能安心的学习。逆水行舟不进则退,希望大家坚持每天所有学有所获。 Flas...

SlaughterDevil的博客 364

Android定位权限全解析:从基础配置到后台持续定位的完整解决方案

本文全面解析Android定位权限体系,从基础配置到后台持续定位的完整解决方案。涵盖LocationManager和FusedLocationProviderClient等主流API的对比选型,详细讲解动态权限申请、精确定位与模糊定位的智能切换,以及Android 10+的后台定位适配策略。帮助开发者构建兼顾精准度与电量友好的定位方案,适用于导航、运动轨迹记录等多种场景。

weixin_29310605的博客 608

Web开发中的消息闪现机制解析与优化实践

消息闪现(Flash Message)是Web开发中处理HTTP无状态特性的关键技术,通过在会话中临时存储消息实现跨请求通信。其核心原理是利用服务器端会话存储或客户端存储机制,确保消息在一次重定向周期内有效显示后自动清除。该技术广泛应用于表单提交、登录状态提示等场景,能显著提升用户体验。在Flask、Django等主流框架中,消息闪现的实现各有特点,开发者需注意重定向丢失、消息分类、前端竞态等常见问题。优化方案包括消息压缩、客户端存储替代等,实测显示WebStorage方案性能可达传统Session的3倍。

weixin_32073537的博客 233

Qt基础之十九:进程与QProcess

进程就是一个程序的执行实例,也就是正在运行的程序。对操作系统来说,进程就是一个担当分配系统资源CPU时间、内存的实体。在Qt 中,我们使用QProcess来表示一个进程。这个类可以允许我们的应用程序启动一个新的外部程序,并且与这个程序进行通讯。当外部程序开始启动时,QProcess的状态为Starting;外部程序已经启动时,QProcess的状态为Running,并发送started()信号;当外部层序退出了,QProcess的状态为NotRunning(初始状态),并发送finished()信号。

草上爬的博客 1万+

【光子 AI】AI Agent 知识体系深度研究报告

从理论基础到前沿应用:全面解析人工智能代理的核心架构、关键技术与发展趋势📅 2026 年 3 月 | 📊 深度研究报告 | 🔬 人工智能领域 | 📈 前沿技术分析**AI Agent(人工智能代理)**是一种能够感知环境、基于所获得的信息做出决策,并执行行动以影响该环境的软件系统。AI Agent 的设计旨在模仿或实现智能行为,它们可以在各种环境中操作,包括物理世界和虚拟空间。随着大语言模型(LLM)技术的突破性进展,AI Agent 正从实验室研究快速走向产业应用。根据 Gartner 发布的《2

AI天才研究院 177

Flask与Flash

Flask是一个使用Python编写的轻量级Web应用框架。它被称为“microframework”,因为它使用简单的核心,并通过扩展(extension)增加其他功能。Flask没有默认使用的数据库、窗体验证工具等,这些功能都需要通过扩展来实现。它非常灵活,允许开发者根据自己的需求定制和扩展功能。

Flask Web 1181

ComfyUI报错ModuleNotFoundError: No module named ‘comfy.options‘

好家伙,我一想我刚刚好像用了pip安装了comfy模块,不会是和ComfyUI自带的comfy模块产生冲突了吧。(3)还有的说是项目不是最新版,叫更新到最新版本的,好家伙,我报错之前根本没更新也没错,突然就报错的。(4)还有的说没有comfy.options这部分代码,叫自己去拉一个,我一看也有啊。我也不知道啥时候脑抽风去装这么个东西的,幸好我聪明机智,一眼就知道了。看把我气的,然后网上搜集各种资料,一个一个去试。

满目星辰 5159

基于flask的闪现、g对象、蓝图

这些信息要等登陆成功之后才会出现 【 二 】g对象 g对象就是一个全局对象 具体示例

m0_58310590的博客 1717

2026 拉勾网:JA4+指纹绕过 + sign逆向 + 动态城市参数,月采集10万+数据实战

2026年拉勾网反爬技术全面升级,采用JA4+ TLS指纹识别、动态sign签名等多维度防护体系。本文提供工业级爬虫解决方案,通过curl_cffi模拟浏览器指纹、逆向sign加密算法、动态生成城市参数三大核心技术,实现高效稳定的数据采集。系统采用分层架构设计,包含任务调度、签名生成、多线程引擎等模块,单月可获取10万+条招聘数据。重点解析了JA4+指纹识别原理、传统方法的局限性,以及通过HMAC-SHA256算法逆向sign参数的完整过程。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2394

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Flask框架web开发(黑马程序员版本)学习笔记

初识Flask

zyt131415的博客 6406

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Flask源码阅读(六)——Flash消息

1.flash消息这种功能,是Flask的核心特性。用于在下一个响应中显示一个消息,让用户知道状态发生了变化。可以使确认消息,警告或者错误提醒。2.仅调用flash()函数并不能把消息显示出来,程序使用的模板要渲染这些消息。Flask把get_flashed()函数开放给模板,用来获取并渲染消息。3.源码def flash(message): """Flashes a message to

slamx的博客 5904

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Flask框架——消息闪现

上篇文章我们学习了,这篇文章我们来学习Flask框架——flash消息闪现。良好的web应用程序中需要即使向用户提供反馈信息,例如当用户输入信息点击提交后,网页会提示是否提交成功或提交信息有误等。Flask框架通过闪现系统提供了一个简单的反馈方式。其基本工作原理为在当前请求结束时记录一个消息,提供给当前请求或者下一个请求使用。例如用户在A页面中操作出错后跳转到B页面,在B页面中展示了A页面的错误信息。这时就可以通过消息闪现将错误信息传递给B页面。......

霖hero 1030
上一篇: 将Android手机打造成你的python开发者桌面
下一篇: 大型情感剧集Selenium:9_selenium配合Pillow完成浏览器局部截图
清风Python
博客等级 码龄7年 406粉丝 267原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值