Python 如何在Flask中初始化会话?

Python 如何在Flask中初始化会话?,python,flask,web-applications,Python,Flask,Web Applications,在任何传入连接上,因此每当新计算机或浏览器连接并创建新会话cookie时,我想初始化两个会话变量。如果我这样做: session["authorized"] = False session["client_id"] = None session["client_secret"] = None session["go_id"] = None session["test_mode"] = None

在任何传入连接上,因此每当新计算机或浏览器连接并创建新会话cookie时,我想初始化两个会话变量。如果我这样做:

session["authorized"] = False
session["client_id"] = None
session["client_secret"] = None
session["go_id"] = None
session["test_mode"] = None
在函数修饰符之外,我遇到了以下错误:

运行时错误:在请求上下文之外工作。
这通常意味着您试图使用所需的功能 活动的HTTP请求。请参阅有关测试的文档 有关如何避免此问题的信息

如果我在第一次请求之前使用
app.decorator,它只会在第一次连接/会话中运行一次初始化,但是如果我连接到另一个浏览器,初始化不会发生。看起来是这样的:

@instance.before_first_request
def initialize():
    session["authorized"] = False
    session["client_id"] = None
    session["client_secret"] = None
    session["go_id"] = None
    session["test_mode"] = None
如果改为在请求之前使用
,则每次请求都会进行初始化,并且变量总是被覆盖


如何只初始化一次会话?

试试这个方法对我很有效

if not session.get('authorized'):
   session['authorized'] = False

if not session.get('client_id'):
   session['client_id'] = None

if not session.get('client_secret'):
   session['client_secret'] = None

if not session.get('go_idt'):
   session['go_id'] = None

if not session.get('test_mode'):
   session['test_mode'] = None

你要找的是请求前的
和请求后的
装饰器。请尝试
@instance。在请求之前请注意默认的Flask会话不安全。不要在里面放像客户机密之类的东西。米格尔·格林伯格(Miguel Grinberg)有一个关于这个主题的博客@PGHE,谢谢你提供这些信息。这个应用程序只是一个RESTAPI客户端,用户必须首先知道这个秘密,所以这不是一个交易,但我会记住这一点,并查看Flask会话。