2017-08-08 57 views
1

我想知道是否可以直接在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) 
+0

类似的问题:https://stackoverflow.com/questions/3768895/如何使一个类,JSON序列化 – VPfB

回答

1

一个简单的方法,使你的对象序列化,并实现你想要的是使用__dict__像这样:

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

我更喜欢'变量(测试(1,2,3))',直接访问'__dict__',但这基本上是一样的。请注意,您还需要将字典反序列化为“测试”对象。我建议将'to_json()'和'from_json()'方法添加到'Test'类并手动调用它们。 –

+0

谢谢你们,完美地工作! ;) – fweidemann14