4.2 Flash消息

———————————————————————前言———————————————————————————

本节介绍如何在我们的程序中使用警示框。

————————————————————————————————————————————————————

一. 修改视图函数
from flask import Flask, render_template, session, redirect, url_for, flash 


@app.route('/', methods=['GET', 'POST'])

def index():

    name = None

    form = FlaskForm() #get请求生成空表单, post请求生成含有提交数据的表单

    if form.validate_on_submit(): #只有请求未post请求并且字段符合验证函数才为True

        old_name = session.get('name') #获取会话上次存的名字

        if old_name is not None and old_name != form.name.data: #如果上次存的名字不为空并且和这次提交的名字不同

            flash('Look like your name has changed!')  #显示flash消息

        session['name'] = form.name.data  #把此次提交的名字存入会话

        return redirect(url_for('index'))  #重定向

    return reder_template('index.html', name=session.get('name'), form=form)  #返回模板

代码分析:

    第一次访问根地址为GET请求, 所以不执行第一个if语句, 直接把None和空表单传入模板, 浏览器状态为图二;

    在文本框输入Dave然后回车,执行第一个if语句, 因为名字没有改动, 此时我们应该跳过flash消息, 所以第二个语句第一个判定条件是old_name is not None, 因为之前session字典没有存名字, 所以old_name为None, 就跳过了flash语句, 直接保存session name, 然后重定向, 返回Dave和空表单, 得到图三;

    然后我们在文本框输入Kobe, 点击提交按钮, 此时我们名字有改动, 应该执行flash语句, 此时old_name不为空并且session字典存的Dave不等于此次表单提交的kobe, 所以显示flash消息, 并且把新提交的名字kobe存在session字典中并重定向, 返回kobe和空表单, 浏览器状态为图四。

二. 修改base.html模板
{% block content %}  #修改页面内容

<div class="container">

  {% for message in get_flash_messages() %}  #for逻辑结构, 当多次提交不同名字时, 所有字符串会作为get_flash_messages函数结果返回

    <div class="alert alert-warning">  #div和Button是可关闭警示框结构, message是flash显示的内容

      <button class="close" type="button" data-dismiss="alert">&times;</button>

      {{ message }}
    </div>
  {% endfor %}

  {% block page_content %}{% endblock %}

</div>

{% endblock %}
三. 效果演示

图一

输入地址并回车:

图二

文本框输入Dave并点击提交按钮:

图三

文本框输入Kobe并点击提交按钮:

图四

                               

再回看终端我们发现, 浏览器总共有5次请求, 后四次请求是两次POST-GET重定向请求。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值