Flask 消息闪烁在重定向中失败

10 投票
2 回答
3526 浏览
提问于 2025-04-16 18:44

我现在在做一个项目,使用的是FlaskGoogle 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',并把这个名称和你想使用的子域名添加到你的主机配置中,或者设置一个本地绑定。

撰写回答