有时候在用户完成了某些操作时,如何让他们知道自己的操作结果,比如操作成功或者操作失败了呢。在flask中,提供了一个闪现消息的函数flash,通过这个函数,我们可以返回给客户端一些消息,让客户端在下一次请求时获得flash的内容。这也叫做闪现消息,下面我们就一起来了解一下吧。

在开始之前,我们先看看闪现消息的常见形式,让大家有个直观的了解。

像上图中的留言成功,这个提示消息就是通过flash函数实现的,那么我们就一起来看看该如何操作吧。

为了演示flash的用法,我们来做一个简单的计算检查游戏,在路由中写出算式与结果,如果正确则提示正确,错误则提示错误,重定向回主页,然后展示信息。

frog.py

from flask import flash

@app.route('/<int:num1>/plus/<int:num2>/eq/<int:num3>')
def count(num1,num2,num3):
    if num1+num2==num3:
        flash('计算正确')
    else:
        flash('计算错误')
    return redirect(url_for('index'))

在模板中通过get_flashed_messages()获取所有的flash信息,是一个list形式。

templates/index.html*

{% extends 'base.html' %}
{% block title %}Frog{% endblock %}
{% block content %}

    {% with messages=get_flashed_messages() %}
            {% if messages %}
                {% for message in messages %}

                <div style='color:green;background-color:lightgreen;padding:10px;'>{{ message }}</div>

                {% endfor %}
        {% endif %}
    {% endwith %}

<h1>hello world!</h1>
{% endblock %}

因为flash内容是储存在session中的,而session又是加密储存在客户端中的。所以在测试之前,先给app设置一个secret_key,随意即可,否则无法正常使用。

frog.py

...
app.config['SECRET_KEY']='123456'
...

然后我们先算一个1+1=2,这个算式是成立的,那么就应该返回计算成功的消息,我们一起来看看吧。

在url中输入127.0.0.1:5000/1/plus/1/eq/2,回车后会回到主页,然后显示计算正确的消息。

在地址栏中回车访问

可以看到,只要算式正确就会显示计算成功,接下来我们来写一个错误的算式

通过上面的简单例子,应该可以理解flash的作用和用法。

在一次请求中调用flash函数添加闪现消息,在下一次请求的时候,通过模板中的get_flashed_messages()获取闪现消息,然后渲染成html代码展示出来,并在闪现消息列表中删除所有添加的消息。

如果下一次请求的模板中没有调用闪现消息,则会继续等待下一次调用,直到调用出来并删除。

get_flashed_message()返回的是一个列表,所有闪现消息的列表,所以在模板中用for循环出所有的消息。而且只要调用一次,储存的闪现消息都会删除。

简单来说就是你可以添加很多次flash消息,但是通过调用get_flashed_message()就会获取所有的消息并删除(因为flash是储存在session中的,所以会从session中删除)。

下图就是多个消息的同时展现

拓展阅读

另外,在flash函数中,我们还可以设置闪现消息的种类,其实就是一个字符串,但是在模板中用会比较方便

flash('计算错误','error')

模板中

{% with messages=get_flashed_messages(with_categories=true) %}
    {% if messages %}
        {% for type,message in messages %}
            <div class='{{ type }}' >{{ message }}</div>
        {% endfor %}
    {% endif %}
{% endwith %}

如果是计算错误,渲染出来应该是这样

<div class='error' >计算错误</div>

然后我们把不同状态的类名及样式写好,这样不同类型的状态样式就会更加符合。比如错误的状态信息用红色的主题样式可能更符合。

.error{padding:10px;background-color:pink;color:red;}

以上就是关于flask闪现消息flash的一些分享啦,如果有什么错误或者建议的话,欢迎提出。那么我们下篇再见吧。

评论

Felix 管理员

仓库地址:http://codemole.cn/felix/Frog/src/frog3.5

回复

  • 最新随笔

  • 对我来说,写东西很好的一点是,自己写的东西,后面基本都会再看,一遍或者很多遍。这样就可以很好地发现自己之前的漏洞,并看看现在有什么变化。
  • 前段时间应该是百度更新了页面结构,那个黑帽泛目录网站我也没有去更新代码,就导致了文章页没有相关推荐,没想到这时候谷歌开始收录了,而且效果还不错。其实之前在谷歌一直不收录的时候就有怀疑过没有尽头的相关推荐很可能是导致不收录的原因,不过也一直没有去管它,而这次误打误撞的收录也恰恰证实了这个想法。(btw,其实这个网站从出现固定链接开始叫泛目录应该不太准确)
  • 最近吉他谱网站iloveguitar上线了,这几天在填充一些内容花了一些时间,这个网站也是使用flask作为后端框架的,前端UI框架使用的是bootstrap4,喜欢吉他的小伙伴欢迎来这里逛一逛哟,有什么建议欢迎在留言板提一下哟。
  • 那个泛目录网站发布了几个星期了,百度没怎么来爬,收了一个首页,谷歌直接就不收了,倒是一个查外链的网站天天来爬(笑哭),还有建议一点就是泛目录还是用在有建站历史的域名比较好(因为已经过了审核期),新域名就尽量不要用了。
  • 刚刚又发了一篇,最近文章百度都不太收录,orz,哈哈
  • 之前那个用python做的静态资源服务器,我又发现了一大用处,现在我都用来在局域网里的不同电脑之间传输文件,真的好用哈哈
  • 今天交换到了博客有史以来第一条友情链接
  • 刚刚更新了一下博客,修复了一些bug,添加了一个项目页