1.重定向和用户会话
在web表单(1)中的hello.py存在一个问题:用户输入名字提交表单后,点击浏览器的刷新按钮,会得到一个要求用户再次提交表单之前进行确认的警告。出现这个问题的原因是刷新页面时浏览器会重新发送之前已经发送过的最后一个请求。如果这个请求是包含表单数据的POST请求,刷新页面后会再次提交表单。所以要解决这个问题,最好的办法是别让web程序把POST请求作为浏览器发送的最后一个请求。
这个问题解决的实现方式是使用重定向作为POST请求的响应。
重定向:是一种特殊的响应,响应内容是URL,而不是包含HTML代码的字符串。浏览器收到这种响应时,会向重定向的URL发起GET请求。这个技巧称为POST/重定向/GET模式。
重定向会带来一个问题:程序处理POST请求时,使用form.name.data获取用户输入的名字,可是一旦请求结束了,数据也就丢失了,所以程序需要保存这个名字,这样重定向后的请求才能获得和使用这个名字。
程序可以把数据存储在用户会话中。
用户会话:是一种私有存储,存在于每个连接到服务器的客户端中。默认情况下,用户会话保存在客户端的cookie中,使用设置的SECRET_KEY进行加密签名。
hello.py完整代码:
from flask import Flask from flask import render_template,session,redirect,url_for from flask_wtf import Form from wtforms import StringField, SubmitField from wtforms.validators import Required from flask_bootstrap import Bootstrap app = Flask(__name__) bootstrap = Bootstrap(app) app.config['SECRET_KEY'] = 'yangdidi' class NameForm(Form): name = StringField('What is your name ?',validators=[Required()]) submit = SubmitField('Submit')@app.route("/"<