2017-08-08 30 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