我正在尝试将在登录视图上设置的会话变量传递给另一个视图。但是,如果提交表单,则会话变量始终返回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(),我希望此方法返回的数据保留整个长度的会话。
编辑: 解决方案,会话变量对象太大了。解决这个问题的一些方法可能包括:
答案 0 :(得分:1)
检查要放入会话的数据大小。如果它太大,请尝试使用较小的物体。
关于基于cookie的会话的注释:Flask将获取您放入会话对象的值并将它们序列化为cookie。如果您发现某些值不会在请求中保留,则确实启用了Cookie,并且您没有收到明确的错误消息,请检查页面响应中的Cookie大小与Web浏览器支持的大小相比。
原帖:
从技术上讲,utils.get_data方法是一个与Web调用不同的会话。尝试实现的获取数据方法是什么?
答案 1 :(得分:0)
如果数据大小有问题,您还可以创建服务器端会话。 可以在您的数据库中存储Flask会话,只需将会话ID存储在cookie中。
例如,此snippet显示了如何在MongoDB中存储会话数据。