Flask消息闪现在重定向时失败

10

我目前正在使用 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个回答

10

我懂了!诀窍是将服务器名称设置为带点的内容。

所以,“localhost”变成了“app.local”,应该将app.local添加到/etc/hosts中,并指向与localhost相同的地址。

文档中可以看到:

请注意,不仅 Flask 存在不知道子域名的问题,你的 web 浏览器也存在这个问题。大多数现代 web 浏览器都不允许在没有点的服务器名称上设置跨子域 cookie。因此,如果您的服务器名称是 localhost,则无法为 localhost 和其每个子域设置 cookie。在这种情况下,请选择一个不同的服务器名称,例如 myapplication.local,并将此名称+您要使用的子域添加到主机配置中或设置本地绑定。


我发现只需将SERVER_NAME注释掉就可以让它工作了。之前我设置了SERVER_NAME = 127.0.0.1:5000 - Eddy
顺便提一下,我需要在我的环境中将 .dev 更改为 .local。 - anvd

3

你是否设置了跨所有子域工作的cookie?

默认情况下,它们只能在设置它们的域中读取。


谢谢您的回复。有什么想法如何做到这一点吗?我看到你可以调用set_cookie(),但我不知道在哪里调用它... http://flask.pocoo.org/docs/api/#response-objects - rgbrgb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接