编辑:实际上,我可以看到会话变量的值发生了变化,但在下次调用该函数时,该值被设置回0
我是Flask初学者,我在更改会话变量的值时遇到问题。以下是我的代码的摘录: 在第一轮评论后编辑
0)我在config.py中设置了SECRET_KEY
变量。
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)我有一个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']
在counter == 10
时更改为1,但在下一次调用中,该值将重新设置为0:确实,{ {1}}运行多次,直到#code
递增为止。
我无法理解我做错了什么。我可能也有更好的组织程序流程,但我认为这与我遇到的问题无关。
编辑:似乎我对counter
视图功能中的会话变量所做的一切只是“本地”。我更改了代码如下,从get_actual_demand()
函数中删除了session['info_released'] = 0
:
login()
检查日志(从代码中删除)我可以看到第一次遇到异常时定义的会话变量,但是再次点击异常就好像会话变量仍然不存在一样。
我认为我的配置中缺少某些内容,但我无法在文档中找到提示。我的config.py如下:
@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)