参考书目为《Flask Web 开发》
github仓库点这里
4.5 重定向和用户会话
知识点
- 重定向 使用重定向作为post请求的响应,而不是常规响应。
为什么使用重定向?
* 输入name之后在刷新界面提示一个警告,重复此前的操作。
* 前一个请求包含表单数据的post请求(name),刷新页面会重新提交单
* web应用的最后一个请求最好别是post请求
* 重定向会发送GET请求
可能引起的问题?
* post请求数据的保存,post请求结束后,数据会消失。
* web应用需要保存输入的名字
解决办法?
* 数据存储在 ::**用户会话**:: 中。
API使用
* redirect() 生成HTTP重定向响应, 参数是重定向的URL。
* url_for() URL生成函数,参数是端点名, 端点是视图函数的名称
@app.route(‘/‘, methods=[‘GET’, ‘POST’])
def index():
name = None
form = NameForm()
if form.validate_on_submit():
sessions[‘name’] = form.name.data
# name = form.name.data
# form.name.data = ‘’
return redirect(url_for(‘index’))
return render_template(‘index.html’, form=form, name=name)
- post/get 两种http请求,post 存在request body, get传url。本质都是TCP链接。
4.6闪现消息
- 用户请求发生了变化,web页面作出响应的提醒。你是张三现在你变成了李四,要发出提醒,不要串戏。
知识点
* flash()配合模板渲染警告消息
* 模板修改 CSS alert样式渲染警告消息
@app.route('/', methods=['GET', 'POST'])
def index():
# name = None
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('你他喵的又改名字了!')
session['name'] = form.name.data
# name = form.name.data
# form.name.data = ''
return redirect(url_for('index'))
return render_template('index.html', form=form, name=session.get('name'))
{% 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 %}