Python 使用MongoEngineSessionInterface存储词典
在一个请求中,我在Python 使用MongoEngineSessionInterface存储词典,python,mongoengine,flask-mongoengine,Python,Mongoengine,Flask Mongoengine,在一个请求中,我在会话['test']中设置了一个字典: session['test'] = {'test': {'test': {'test':0}}} 下一次迭代,会话从MongoDB读回,但是dict已经成为一个不可变的。试图修改它会引起 ReferenceError: weakly-referenced object no longer exists 我可以强制转换为dict,但它不是递归的 print(type(session['test'])) print(type(sessio
会话['test']
中设置了一个字典:
session['test'] = {'test': {'test': {'test':0}}}
下一次迭代,会话从MongoDB读回,但是dict
已经成为一个不可变的
。试图修改它会引起
ReferenceError: weakly-referenced object no longer exists
我可以强制转换为dict
,但它不是递归的
print(type(session['test']))
print(type(session['test']['test']))
print(type(session['test']['test']['test']))
test = dict(session['test'])
print(type(test))
print(type(test['test']))
print(type(test['test']['test']))
印刷品
<class 'mongoengine.base.datastructures.BaseDict'>
<class 'mongoengine.base.datastructures.BaseDict'>
<class 'mongoengine.base.datastructures.BaseDict'>
<class 'dict'>
<class 'mongoengine.base.datastructures.BaseDict'>
<class 'mongoengine.base.datastructures.BaseDict'>
您使用的是什么版本的flask和flask mongoengine?当我使用
app.session\u interface.cls.data={'test':{'test':{'test':{'test':0}}}
时,我会在下一个请求时返回一个dict
。有关版本,请参阅编辑。我不直接调用app.session\u接口。我按照文档的建议做了:app.session\u interface=mongoenginessessioninterface(db)
初始化时。然后在代码中,我从Flask导入session
,并使用session
,假设在初始化时设置app.session\u接口
。显然是这样的,因为会话确实存储在MongoDB中。在请求和创建的BaseDict
实例之间正在进行一些垃圾收集,但由于BaseDict使用weakref.proxy
,引用仍然存在。然后,当您调用BaseDict.\uuuuu setitem\uuuu
时,将引发异常。如果你提出问题,这可能是可以解决的。好吧,我想我应该先问一下这里,以防我没有正确使用它。问题是:
Name: Flask
Version: 0.10.1
Location: /usr/lib/python3/dist-packages
Name: flask-mongoengine
Version: 0.7.5
Location: /home/jerome/.virtualenvs/simutheque/lib/python3.4/site-packages