Flask - 将对象直接存储在会话中[重复]
Posted
技术标签:
【中文标题】Flask - 将对象直接存储在会话中[重复]【英文标题】:Flask - store object directly in a session [duplicate] 【发布时间】:2018-01-15 23:41:38 【问题描述】:我想知道是否可以将对象直接存储在 Flask 会话中,而无需重写序列化程序。为了让它工作,我需要在我的班级中实现任何功能吗?
下面的示例代码。这就是我想要的样子。但是,当您尝试执行它时,它会抛出错误 à la TypeError: Object of type 'Test' is not JSON serializable
非常感谢任何帮助!提前致谢! :)
import flask
from flask import Flask, session, redirect
class Test:
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
app = Flask(__name__)
app.secret_key = 'xyz'
@app.route('/')
def main():
session['my_object'] = Test(1, 2, 3)
return redirect('retrieve')
@app.route('/retrieve')
def return_my_object():
my_object = session.get('my_object')
return str(my_object)
if __name__ == '__main__':
app.run(debug=True)
【问题讨论】:
类似问题:***.com/questions/3768895/… 【参考方案1】:使您的对象序列化并实现您想要的一种简单方法是使用__dict__
,如下所示:
def main():
session['my_object'] = Test(1, 2, 3).__dict__
return redirect('retrieve')
【讨论】:
我更喜欢vars(Test(1, 2, 3))
,而不是直接访问__dict__
,但这本质上是一样的。请注意,您还需要将字典反序列化为 Test
对象。我建议将方法 to_json()
和 from_json()
添加到 Test
类并手动调用它们。
谢谢你们,工作完美! ;)以上是关于Flask - 将对象直接存储在会话中[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用heroku部署的flask webapp上为每个用户实现唯一的会话[重复]