修复类以在Flask会话中启用对象存储

时间:2014-06-04 11:11:08

标签: python flask

我有一个包含活动用户身份和权限的自定义类Passport。我过去常常将它存储在会话中:

p = Passport()
p.do_something_fancy()
session["passport"] = p

它刚刚起作用。现在,在服务器升级后,我收到此错误:

TypeError: <userman.Passport instance at 0x7f06e9356f38> is not JSON serializable

我想它与Flask中的一些升级有关,现在要求对象可以通过JSON序列化存储在会话中。但是如何正确地使对象JSON可序列化?也许我必须提供一个序列化方法和一个反序列化方法,以便在再次加载时恢复对象状态?

1 个答案:

答案 0 :(得分:3)

您必须创建一个自定义JSONEncoder类,并告诉Flask将其用于JSON序列化/反序列化。

以下是粗略的工作原理:

from flask.json import JSONEncoder

class CustomJSONEncoder(JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Passport):
            # Implement code to convert Passport object to a dict
            return passport_dict
        else:
            JSONEncoder.default(self, obj)

# Now tell Flask to use the custom class
app.json_encoder = CustomJSONEncoder