消息闪现

Flask 提供了一个非常简单的方法来使用闪现系统向用户反馈信息。闪现系统使得在一个请求结束的时候记录一个信息,然后在且仅仅在下一个请求中访问这个数据。Flask消息闪现可以给用户更好的体验。比如,我们改造一下上一篇中的上传图片代码,加入消息闪现功能。

首先,在方法前加上app.secret_key = 'some_secret',如果缺少,报错:
RuntimeError: The session is unavailable because no secret key was set. Set the secret_key on the application to something unique and secret.

对上文的上传照片代码略微改动,如下:

@app.route('/up')
def up():return render_template('up.html')# 上传文件
@app.route('/up_photo', methods=['POST'], strict_slashes=False)
def api_upload():file_dir = os.path.join(basedir, app.config['UPLOAD_FOLDER'])if not os.path.exists(file_dir):os.makedirs(file_dir)f = request.files['photo']if f and allowed_file(f.filename):fname = secure_filename(f.filename)print fnameext = fname.rsplit('.', 1)[1]new_filename = Pic_str().create_uuid() + '.' + extf.save(os.path.join(file_dir, new_filename))flash("photo upload success")return redirect(url_for('up'))#return jsonify({"success": 0, "msg": "上传成功"})else:return jsonify({"error": 1001, "msg": "上传失败"})


模板展示代码:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>上传</title>
</head>
<body>{% with messages = get_flashed_messages() %}{% if messages %}<ul class=flashes>{% for message in messages %}<li>{{ message }}</li>{% endfor %}</ul>{% endif %}{% endwith %}<form id="form1" method="post" action="/up_photo" enctype="multipart/form-data"><div><input id="File1" type="file" name="photo"/><input type="submit">提交</input></div></form>
</body>
</html>

选择图片,点击上传之后,显示如图所示

而当我们刷新页面之后,闪现消息消失。

分类闪现,当闪现一个消息时,是可以提供一个分类的。这更符合我们实际开发中的场景,例如,当文件上传成功时,我们提示消息“photo upload success”为绿色;上传文件失败时,我们提示消息“photo upload error”为红色。

@app.route('/up_photo', methods=['POST'], strict_slashes=False)
def api_upload():file_dir = os.path.join(basedir, app.config['UPLOAD_FOLDER'])if not os.path.exists(file_dir):os.makedirs(file_dir)f = request.files['photo']if f and allowed_file(f.filename):fname = secure_filename(f.filename)print fnameext = fname.rsplit('.', 1)[1]new_filename = Pic_str().create_uuid() + '.' + extf.save(os.path.join(file_dir, new_filename))flash("photo upload success", "success")return redirect(url_for('up'))#return jsonify({"success": 0, "msg": "上传成功"})else:flash("photo upload error", "error")return redirect(url_for('up'))#return jsonify({"error": 1001, "msg": "上传失败"})


模板展示代码:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>上传</title>
</head>
<body>{% with messages = get_flashed_messages(category_filter=['success'])%}{% if messages %}<ul>{% for message in messages %}<li style="color:green">{{ message }}</li>{% endfor %}</ul>{% endif %}{% endwith %}{% with messages = get_flashed_messages(category_filter=['error'])%}{% if messages %}<ul>{% for message in messages %}<li style="color:red">{{ message }}</li>{% endfor %}</ul>{% endif %}{% endwith %}<form id="form1" method="post" action="/up_photo" enctype="multipart/form-data"><div><input id="File1" type="file" name="photo"/><input type="submit">提交</input></div></form>
</body>
</html>

这样,上传成功或者失败之后,页面提示更加符合习惯

log记录

日志记录的级别(来源:https://blog.csdn.net/iszhenyu/article/details/56846551):

ERROR:这个级别的日志意味着系统中发生了非常严重的问题,必须有人马上处理,比如数据库不可用了,系统的关键业务流程走不下去了等等。很多人在实际开发的时候,不会去区分问题的重要程度,只要有问题就error记录下来,其实这样是非常不负责任的,因为对于成熟的系统,都会有一套完整的报错机制,那这个错误信息什么时候需要发出来,很多都是依据单位时间内error日志的数量来确定的。因此如果我们不分轻重缓急,一律error对待,就会徒增报错的频率,久而久之,我们的救火队员对错误警报就不会那么在意,这个警报也就失去了原始的意义。

WARN:发生这个级别的问题时,处理过程可以继续,但必须要对这个问题给予额外的关注。假设我们现在有一个系统,希望用户每一个月更换一次密码,而到期后,如果用户没有更新密码我们还要让用户可以继续登录,这种情况下,我们在记录日志时就需要使用WARN级别了,也就是允许这种情况存在,但必须及时做跟踪检查。

INFO:这个级别的日志我们用的也是比较多,它一般的使用场景是重要的业务处理已经结束,我们通过这些INFO级别的日志信息,可以很快的了解应用正在做什么。我们以在12306上买火车票为例,对每一张票对应一个INFO信息描述“[who] booked ticket from [where] to [where]”。

DEBUG和TRACE:我们把这两个级别放在一起说,是应为这两个级别的日志是只限于开发人员使用的,用来在开发过程中进行调试,但是其实我们有时候很难将DEBUG和TRACE区分开来,一般情况下,我们使用DEBUG足以。

调用日志记录的示例:

app.logger.debug('A value for debugging')
app.logger.warning('A warning occurred (%d apples)', 42)
app.logger.error('An error occurred')

如,放在我们上面的代码中,我们希望在上传成功之后,把这条信息记录一下:

app.logger.info(fname+'上传成功了.....')

这里包括闪现消息那部分,如果提示消息是中文提示编码问题,此时需要在开始地方加上:

import sys
...
reload(sys)
sys.setdefaultencoding('utf-8')

Flask消息闪现及日志记录相关推荐

  1. flask消息闪现和日志

    原来后台向前端传递消息 render_template('test.html',msg='hello world') 前端接收{{ msg }} 一.消息闪现: 在一个请求结束的时候添加flash f ...

  2. Flask 消息闪现

    Flask 消息闪现 一个好的基于GUI的应用程序会向用户提供有关交互的反馈.例如,桌面应用程序使用对话框或消息框,JavaScript使用警报用于类似目的. 在Flask Web应用程序中生成这样的 ...

  3. Python Flask Web教程014:Flask 消息闪现

    Flask 消息闪现 一个好的基于 GUI 的应用程序会向用户提供有关交互的反馈.例如,桌面应用程序使用对话框或消息框,JavaScript 使用警报用于类似目的. 在 Flask Web 应用程序中 ...

  4. Flask 重定向、错误和消息闪现

    Flask 重定向和错误 Flask类有一个**redirect()**函数.调用时,它返回一个响应对象,并将用户重定向到具有指定状态代码的另一个目标位置. redirect函数 **redirect ...

  5. Flask(十二)——消息闪现

    一个基于GUI好的应用程序需要向用户提供交互的反馈信息. 例如,桌面应用程序使用对话框或消息框,JavaScript使用 alert() 函数用于类似的目的. 在Flask Web应用程序中生成这样的 ...

  6. SAP PI PO 接口常见问题处理:在监控器中找不到一个或多个 XI 消息的日志记录

    已经处理 XI 消息,但在 XI 监控器中找不到它,或者在映射服务之后没有为该 XI 消息写入日志版本.如果运行时持久保存 XI 消息,则 XI 监控器(事务 SXI_MONITOR 或 SXMB_M ...

  7. 记录日志的测试软件_教程:测试期间的日志记录

    记录日志的测试软件 日志记录是一种流行的解决方案,用于显示软件在运行时的运行状况. 但是,当我们使用jUnit / TestNG对应用程序进行单元测试时,日志记录会怎样? 在自动化测试执行期间,我们通 ...

  8. 教程:测试期间的日志记录

    日志记录是一种流行的解决方案,用于显示软件在运行时的运行状况. 但是,当我们使用jUnit / TestNG对应用程序进行单元测试时,日志记录会怎样? 在自动化测试执行期间,我们通常不希望看到日志记录 ...

  9. mysql闪现_Flask消息闪现

    一个基于GUI好的应用程序需要向用户提供交互的反馈信息. 例如,桌面应用程序使用对话框或消息框,JavaScript使用alert()函数用于类似的目的. 在Flask Web应用程序中生成这样的信息 ...

最新文章

  1. 错误:ORA-12537: TNS: 连接关闭
  2. 全球项目多区域数据同步问题解决方案
  3. 使用坚果云同步SVN服务器数据
  4. 05 | 数组:为什么很多编程语言中数组都从0开始编号?
  5. 商城报表系统html5,关于html5:推荐这几款主流报表产品
  6. 【codevs4654】【BZOJ2442】修剪草坪,第一次的单调队列,优化DP
  7. BZOJ4034 树上操作
  8. Apache下的Lua的配置
  9. UE5 预览版载具模板工程车不能移动的问题
  10. plc通过无线通讯连接服务器,PLC无线通讯
  11. 软件系统部署手册模版
  12. 惊鸿一现的永恒经典2007-05-07 09:40:18
  13. [二分图]Codeforces 19E. Fairy
  14. STM32C8T6+LORA(SX1278)
  15. 二分查找与时间复杂度计算分析
  16. ubuntu IPV6及作为路由分配【笔记】
  17. 中文文本分类——商品评论情感判别
  18. Xgen Animwires 随笔01
  19. Xpath语法和使用示例
  20. 观看《赢在中国 蓝天碧水间》观后感

热门文章

  1. 用算法“脱掉”女性衣服,这款AI应用被迫下架后再被全网封杀
  2. 荣耀20 Pro正面渲染图曝光:开孔全面屏设计+后置四摄
  3. 李彦宏、王海峰等成为工程院院士候选人选
  4. 外挂摄像头?iPhone XI新概念图曝光:差点就信了...
  5. 来了!苹果二代AirPods 3月发布 全黑配色加入
  6. 都安排上了!春晚主持阵容、春晚直播平台、春晚餐桌C位
  7. Spring容器创建流程(9)完成创建
  8. matlab如何把实验结果记录在文件中,实验一Matlab基本操作
  9. 【算法】剑指 Offer 40. 最小的k个数 【重刷】
  10. 【clickhouse】clickhouse配置多块磁盘