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上为每个用户实现唯一的会话[重复]

如何使用 Flask 将复杂对象序列化为 JSON [重复]

python 框架Flask学习笔记之session

PHP 会话与 Cookies [重复]

使用 Flask 获取表单数据 [重复]

在 Flask 会话中存储 oAuth 状态令牌