4.6 閃現消息
阿新 • • 發佈:2019-01-07
狀態 提示 form 請求 ndb 一次 如何 methods bubuko
請求完成後,有時需要讓用戶知道狀態發生了變化,可以是確認消息、警告或者錯誤提醒。一個典型例子是,用戶提交有一項錯誤的登錄表單後,服務器發回的響應重新渲染登錄表單,並在表單上面顯示一個消息,提示用戶名或密碼無效。
Flask 本身內置這個功能。如示例 4-6 所示,flash() 函數可實現這種效果。
示例 4-6 hello.py:閃現消息
from flask import Flask, render_template, session, redirect, url_for, flash @app.route('/', methods=['GET', 'POST']) def index(): form = NameForm() if form.validate_on_submit(): old_name = session.get('name') if old_name is not None and old_name != form.name.data: flash('Looks like you have changed your name!') session['name'] = form.name.data return redirect(url_for('index')) return render_template('index.html',form = form, name = session.get('name'))
在這個示例中,每次提交的名字都會和存儲在用戶會話中的名字進行比較,而會話中存儲的名字是前一次在這個表單中提交的數據。如果兩個名字不一樣,就會調用 flash() 函數, 在發給客戶端的下一個響應中顯示一個消息。
僅調用 flash() 函數並不能把消息顯示出來,應用的模板必須渲染這些消息。最好在基模板中渲染閃現消息,因為這樣所有頁面都能顯示需要顯示的消息。Flask 把 get_flashed_messages() 函數開放給模板,用於獲取並渲染閃現消息,如示例 4-7 所示。
示例 4-7 templates/base.html:渲染閃現消息
{% block content %} <div class="container"> {% for message in get_flashed_messages() %} <div class="alert alert-warning"> <button type="button" class="close" data-dismiss="alert">×</button> {{ message }} </div> {% endfor %} {% block page_content %}{% endblock %} </div> {% endblock %}
這個示例使用 Bootstrap 提供的 CSS alert 樣式渲染警告消息(如圖 4-4 所示)。
圖 4-4:閃現消息
這裏使用了循環,因為在之前的請求循環中每次調用 flash() 函數時都會生成一個消息, 所以可能有多個消息在排隊等待顯示。get_flashed_messages() 函數獲取的消息在下次調用時不會再次返回,因此閃現消息只顯示一次,然後就消失了。
從 Web 表單中獲取用戶輸入的數據是多數應用都需要的功能,把數據保存在永久存儲器中也是一樣。第 5 章將介紹如何在 Flask 中使用數據庫。
《基於Python的Web應用開發實戰(第二版)》
4.6 閃現消息