【发布时间】:2016-06-14 22:33:45
【问题描述】:
我正在尝试将在登录视图上设置的会话变量传递给另一个视图。但是,如果提交表单,会话变量总是返回 None,我希望会话变量保留。
工具页面有一些表单字段和一个文本框,用于处理基于会话['foo'] 的自动完成搜索,该会话在良好登录时发送。
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
# Get some form variables here
if login is valid:
login_user(user, remember=True)
session['foo'] = utils.get_data()
return redirect(url_for('tools'))
return render_template('login.html')
@app.route("/tools", methods=['GET', 'POST'])
@login_required
def tools():
if session['foo'] is None:
print "Data is None type, getting data"
session['foo'] = utils.get_data()
if request.method == 'POST':
# Handling some forms here
# If one of these forms are submitted, session['foo'] is set to None :(
return render_template('tools.html', foo_data=session['foo'])
Utils.py
def get_data():
response = requests.post(url, data=data) # FYI, server won't allow GET for this call.
# Do json type stuff here to make response.content nice for javascript
return response
基本上,这段代码发生的情况是,每次我提交表单时,我都必须检查它是否为 None 并调用 utils.get_data(),我希望此方法返回的数据保留整个长度会议。
编辑: 解决办法,会话变量对象太大。解决这个问题的一些方法可能包括:
- 使用 AJAX 避免每次提交时刷新页面,从而不会刷新会话对象
- 将对象分割成更小的块
- 避免在 cookie 中存储大型对象 - 使用本地存储
【问题讨论】:
-
您是否设置了密钥,正如here 所解释的那样?
-
我当然会这样做 :) 我可以在 javascript/客户端上很好地使用该变量,我的问题是每次表单刷新页面时它都会变为 None。编辑:实际上我的设置为 app.config['SECRET_KEY'] = 'super secret key'
-
是 "session['search_data'] = utils.get_data() 复制粘贴错误还是应该是 "session['foo'] = utils.get_data()"
-
复制粘贴错误,将修复!
标签: javascript python json session flask