标签:user 缺省 amp htm http doctype 是你 rate function
目录
一个好的应用和用户界面都需要良好的反馈。如果用户得不到足够的反馈,那么应用最终会被用户唾弃。
Flask 的闪现系统提供了一个良好的反馈方式。
闪现系统的基本工作方式是:
以下是一个完整的示例:
from flask import Flask, flash, redirect, render_template, request, url_for
app = Flask(__name__)
app.secret_key = b‘_5#y2L"F4Q8z\n\xec]/‘
@app.route(‘/‘)
def index():
return render_template(‘index.html‘)
@app.route(‘/login‘, methods=[‘GET‘, ‘POST‘])
def login():
error = None
if request.method == ‘POST‘:
if request.form[‘username‘] != ‘admin‘ or request.form[‘password‘] != ‘secret‘:
error = ‘Invalid credentials‘
else:
flash(‘You were successfully logged in‘)
return redirect(url_for(‘index‘))
return render_template(‘login.html‘, error=error)
上面py文件比如保存为flashtest.py
以下是实现闪现的 layout.html
模板:
注,html模板默认放在项目的templates目录下。
<!doctype html>
<title>My Application</title>
{% with messages = get_flashed_messages() %}
{% if messages %}
<ul class=flashes>
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
{% block body %}{% endblock %}
以下是继承自 layout.html
的 index.html
模板:
{% extends "layout.html" %}
{% block body %}
<h1>Overview</h1>
<p>Do you want to <a href="{{ url_for(‘login‘) }}">log in?</a>
{% endblock %}
以下是同样继承自 layout.html
的 login.html
模板:
{% extends "layout.html" %}
{% block body %}
<h1>Login</h1>
{% if error %}
<p class=error><strong>Error:</strong> {{ error }}
{% endif %}
<form method=post>
<dl>
<dt>Username:
<dd><input type=text name=username value="{{
request.form.username }}">
<dt>Password:
<dd><input type=password name=password>
</dl>
<p><input type=submit value=Login>
</form>
{% endblock %}
运行应用
>set FLASK_APP=flashtest.py
>python -m flask run
访问默认的127.0.0.1:5000
可见闪现效果:
闪现消息还可以指定类别,如果没有指定,那么缺省的类别为 ‘message‘
。不同的 类别可以给用户提供更好的反馈。例如错误消息可以使用红色背景。(样式要自己根据class=类别额外去写好css)
使用 flash()
函数可以指定消息的类别:
flash(u‘Invalid password provided‘, ‘error‘)
注: 这一行是添加在 error= ‘Invalid credentials‘
这一行之后:
@app.route(‘/login‘, methods=[‘GET‘,‘POST‘])
def login():
error = None
if request.method == ‘POST‘:
if request.form[‘username‘] != ‘admin‘ or request.form[‘password‘] != ‘secret‘:
error= ‘Invalid credentials‘
flash(u‘Invalid password provided‘, category=‘error‘)
else:
flash(‘You were successfully logged in‘)
return redirect(url_for(‘index‘))
return render_template(‘login.html‘,error=error)
模板中的 get_flashed_messages()
函数也应当返回类别,显示消息的循环 也要略作改变:
{% 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 %}
上例展示如何根据类别渲染消息,还可以给消息加上前缀,如 <strong>{{ category }}:</strong>
。
<!DOCTYPE html>
<title>My Application</title>
{% with messages = get_flashed_messages(with_categories=True) %}
{% if messages %}
<ul class=flashes>
{% for category, message in messages %}
<li class="{{ category }}"><strong>{{ category }}:</strong>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
{% block body %}{% endblock %}
注:虽然可以拿到类别,但是要依据类别来写li标签的样式,让错误信息显示是红色背景还要自己额外去写好样式哦。
你可以视情况通过传递一个类别列表来过滤 get_flashed_messages()
的 结果。这个功能有助于在不同位置显示不同类别的消息。
{% 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 %}
flask.flash()
和 get_flashed_messages()
官网说明如下:
flask.flash(message, category=‘message‘)
Flashes a message to the next request. In order to remove the flashed message from the session and to display it to the user, the template has to call get_flashed_messages()
.
Parameters:
message – the message to be flashed.
category – the category for the message.
The following values are recommended:
‘message‘
for any kind of message,
‘error‘
for errors,
‘info‘
for information messages and ‘warning‘
for warnings.
However any kind of string can be used as category.
flask.get_flashed_messages(with_categories=False, category_filter=[])
Pulls all flashed messages from the session and returns them. Further calls in the same request to the function will return the same messages. By default just the messages are returned, but when with_categories is set to True
, the return value will be a list of tuples in the form (category, message)
instead. Filter the flashed messages to one or more categories by providing those categories in category_filter. This allows rendering categories in separate html blocks. The with_categories and category_filter arguments are distinct: with_categories controls whether categories are returned with message text (True
gives a tuple, where False
gives just the message text). category_filter filters the messages down to only those matching the provided categories.
See 消息闪现 for examples.
Parameters:
with_categories – set to True
to also receive categories.
category_filter – whitelist of categories to limit return values
从官网里可以看出,flash()
函数:
第一个参数是你将要放进去的字符串消息,
第二个默认参数category,代表消息的类别,默认为message(消息,普通)。
而get_flashed_messages()
两个默认参数,第一个是类别控制开关,默认是False。
文:铁乐与猫
2018-9-6
标签:user 缺省 amp htm http doctype 是你 rate function
原文地址:https://www.cnblogs.com/tielemao/p/9613956.html