修复类以在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 个回答
3
你需要创建一个自定义的 JSONEncoder
类,并告诉 Flask 使用这个类来处理 JSON 的转换,也就是把数据变成 JSON 格式和从 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