编辑:实际上,我可以看到会话变量的值发生变化,但在给函数的下一次调用的值设置回0更改会话变量值失败
我的烧瓶初学者和我在更改会话变量的值时遇到问题。下面是我的代码的摘录:第一轮征求意见
0)我设置SECRET_KEY
变量在我config.py后 编辑。
1)当在予用户登录设置会话变量:
@app.route('/login', methods=['GET', 'POST'])
def login():
session['info_released'] = 0
app.logger.debug('info_released session value: {}'.format(session['info_released'])
...
检查日志,会话变量的值被正确地设置为0。
2)I有一个counter
通过request.json
传递的变量会随时增加。一个counter
增量和下面的一个与我检查以下条件数次(通过Ajax调用):
@app.route('/get_actual_demand', methods=['GET', 'POST'])
def get_actual_demand():
app.logger.info('> SESSION: {}'.format(session['info_released']))
if request.json['counter'] == 10 and session['info_released'] == 0:
#code
session['info_released'] = 1
app.logger.info('> SESSION VAR. AFTER CHANGE: {}'.format(session['info_released']))
return jsonify(released=1)
else:
return jsonify(released=0)
也就是说,当counter == 10
我检查车况很多次,但我想运行#code
只有一次(第一次counter == 10
和会话变量是0)。
编辑:检查日志时,session['info_released']
变为1时counter == 10
,但在随后的通话中值重新设置为0:事实上,#code
运行多次,直到counter
得到增加。
我不明白我做错了什么。我可能也会更好地组织程序流程,但我认为它与我遇到的问题无关。
编辑:看来,我所做的关于get_actual_demand()
视图函数中的会话变量的所有内容都只是“本地”。我改变了代码如下,从login()
功能删除了session['info_released'] = 0
:
@app.route('/get_actual_demand', methods=['GET', 'POST'])
def get_actual_demand():
# the variable session['info_released'] is no more
# defined in the login() function
if request.json['counter'] == 10:
try:
# The first time I get here, raise a KeyError exception
if session['info_released'] == 1:
return jsonify(released=0)
except KeyError:
# Use `session['info_released']` as a flag,
# defined here
session['info_released'] = 1
return jsonify(released=1)
else:
return jsonify(released=0)
检查日志(从代码中删除),我可以看到所定义的会话变量时,第一次碰到异常,但随后命中再次异常就像会话变量仍然不存在一样。
我认为在我的配置中缺少一些东西,但我在文档中找不到提示。我的config.py如下:
import os
basedir = os.path.abspath(os.path.dirname(__file__))
class Config(object):
DEBUG = False
TESTING = False
CSRF_ENABLED = True
WTF_CSRF_ENABLED = True
SECRET_KEY = 'oqEr[]*[email protected]#11!&$fsa%(Mn21eq'
SQLALCHEMY_MIGRATE_REPO = os.path.join(basedir, 'db_repository')
class DevelopmentConfig(Config):
DEVELOPMENT = True
DEBUG = True
SQLALCHEMY_DATABASE_URI ='postgresql+psycopg2://libra:[email protected]/mydb'
你确定你的计数器是10,你在哪里存储你的计数器变量。这也是一个会话变量,或者你正在使用某种外部缓存? – Boris
你可以尝试在if语句之后添加一行'import pdb; pdb.set_trace()'吗?这将在您的本地服务器正在运行的控制台中打开一个调试器。在那里你可以检查所有变量的值 – shreyas
代码的第二部分在哪里?我认为你需要展示这两个片段是如何相关的。他们在相同的视图功能或不同? – Miguel