首页 > 解决方案 > 如何在 Flask 中初始化会话?

问题描述

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

session["authorized"] = False
session["client_id"] = None
session["client_secret"] = None
session["go_id"] = None
session["test_mode"] = None

在函数装饰器之外,我收到了这个错误:

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

如果我使用app.before_first_request装饰器,它只会为第一个连接/会话运行一次初始化,但如果我连接另一个浏览器,初始化不会发生。看起来像这样:

@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

如果我改为使用before_request,则初始化发生在每个请求上,并且变量总是被覆盖。

如何初始化每个会话但只初始化一次?

标签: pythonflaskweb-applications

解决方案


试试这个方法对我有用

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

推荐阅读