Flask 消息闪烁在重定向中失败
我现在在做一个项目,使用的是Flask和Google App Engine。我在用get_flashed_messages()
这个函数时,发现当我显示一条消息然后用redirect()
重定向时,它返回的是空的。
@views.route('/todo/add', methods=["POST"])
def add_todo():
flash('hey')
return redirect(url_for('todo_list'))
不过,如果我把
# SERVER_NAME = 'localhost'
这一行注释掉,它就能正常工作了。我的问题是我必须使用子域名,所以需要设置SERVER_NAME。
这是怎么回事呢?
2 个回答
3
你有没有设置好让 cookies 在所有子域名之间都能使用?
默认情况下,cookies 只能在设置它们的那个域名上读取。
10
我明白了!
诀窍是把服务器名称设置成带点的名字。
比如,把'localhost'改成'app.local',然后在/etc/hosts文件里添加'app.local',让它指向和localhost一样的地址。
根据文档:
请记住,不仅仅是Flask不知道什么是子域名,你的网页浏览器也不知道。大多数现代浏览器不允许在没有点的服务器名称上设置跨子域名的cookie。所以如果你的服务器名称是'localhost',你就无法为'localhost'及其所有子域名设置cookie。在这种情况下,请选择一个不同的服务器名称,比如'myapplication.local',并把这个名称和你想使用的子域名添加到你的主机配置中,或者设置一个本地绑定。