使用MongoEngineSessionInterface存储字典

时间:2016-01-28 17:41:02

标签: python mongoengine flask-mongoengine

在请求中,我在session['test']中设置了字典:

session['test'] = {'test': {'test': {'test':0}}}

下一次迭代,会话从MongoDB读回,但dict已成为<class 'mongoengine.base.datastructures.BaseDict'>,它是不可变的。试图修改它会引发

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'>

cookie会话存储不会发生这种情况。

  • 这是MongoEngineSessionInterface的限制(与Cookie界面相对)吗?

  • 我做错了吗?关于MongoEngineSessionInterface的文档有点简短。

  • 我是否误用session试图填写其中的许多数据?

关键是我可以阅读或替换session中的密钥,但我不能再修改它了。

编辑:lib版本

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

0 个答案:

没有答案