python - 如何在 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
,则初始化发生在每个请求上,并且变量总是被覆盖。
如何初始化每个会话但只初始化一次?
解决方案
试试这个方法对我有用
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
推荐阅读
- node.js - 我如何将数据保存到一个值问题中以便稍后在我的代码中使用它
- java - Proguard 方法优化
- bash - Shell 脚本 - 不添加结果
- matlab - 在 Matlab 中保存为文本时如何在列标题中包含“@”(R2017b)
- python - 如何在字符串中找到字符的位置?[Python]
- excel - 计算的列将不再显示在数据透视表中
- amazon-web-services - 无法从 EC2 实例上的调度程序访问 Dask Worker
- android - 无法在 xamarin 中编辑框架内的条目
- json - 从 json 模式中提取默认值
- python - XPath - 只获取属性值或文本节点的一部分