編輯:實際上,我可以看到會話變量的值發生變化,但在給函數的下一次調用的值設置回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