Flask - 直接在会话中存储对象

12

我想知道是否有可能在Flask会话中直接存储一个对象,而不需要重新编写序列化器。我需要在我的类中实现哪些函数才能使其工作?以下是示例代码。这就是我想要的样子。但是,当您尝试执行它时,它会抛出错误,如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)

类似问题:https://dev59.com/72865IYBdhLWcg3wivCi - VPfB
1个回答

10

使对象序列化并实现您想要的功能的简单方法是使用__dict__,例如:

def main():
    session['my_object'] = Test(1, 2, 3).__dict__
    return redirect('retrieve')

1
我更喜欢使用vars(Test(1, 2, 3)),而不是直接访问__dict__,但本质上它们是相同的。请注意,您还需要将字典反序列化为一个Test对象。我建议在Test类中添加to_json()from_json()方法,并手动调用它们。 - Sven Marnach
1
谢谢大家,完美运行!;) - fweidemann14

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接