当前位置: 首页 > 面试题库 >

使用Flask 0.10.1时获取'TypeError:ObjectId('')不可序列化JSON)

毛缪文
2023-03-14
问题内容

我将Flask示例Minitwit与MongoDB一起使用,并且在Flask 0.9上运行良好,但是升级到0.10.1后,当我尝试设置会话ID时登录时出现标题错误。

似乎Flask 0.10.1中有与json相关的更改。

程式码片段:

user = db.minitwit.user.find_one({'username': request.form['username']})
session['_id'] = user['_id']

基本上,我将MongoDB中的Flask会话ID设置为用户的_id。

我尝试了这个SO问题的前两个解决方案,但没有成功。

好吧,执行session [‘ id’] = str(user [‘ id’])摆脱了错误消息,我已正确重定向到时间线页面,但实际上并未登录。

我怎样才能解决这个问题?


问题答案:

只需将会话·保存为字符串:

user = db.minitwit.user.find_one({'username': request.form['username']})
session['_id'] = str(user['_id'])

然后,在任何你想对·进行操作的地方,都必须用ObjectId()进行包装,以便将其作为ObjectId对象传递给MongoDB。

if '_id' in session:
    g.user = db.minitwit.user.find_one({'_id': session['_id']})

至:

if '_id' in session:
    g.user = db.minitwit.user.find_one({'_id': ObjectId(session['_id'])})


 类似资料:
  • 问题内容: 在使用Python查询文档上的聚合函数后,我从MongoDB返回了响应,它返回有效响应,我可以打印该响应但不能返回它。 错误: 打印: 但是当我尝试返回时: 这是RESTfull调用: 数据库连接良好,集合也在那里,我得到了有效的预期结果,但是当我尝试返回时,它给了我Json错误。任何想法如何将响应转换回JSON。谢谢 问题答案: 您应该定义自己并使用它: 也可以按以下方式使用它。

  • 问题内容: 我正在序列化 http://powercollections.codeplex.com/到json。 它具有618个元素,这些元素具有深层嵌套,即单个Object可能在其中包含多个字典之类的对象。我正在使用JSON.Net 我想念什么? 更多信息:-直到我使用dynamic之前,它都可以正常工作,我不得不切换到MultiDictionary以允许具有相同名称的多个属性。它适用于大多数情

  • 类的包 不实现。 我想使这个对象可序列化,因为我在应用程序服务器之间使用会话复制,保存在会话中。 我有两个选择来实现这一点: 实现子类 。 在 上使用 方法,同时将此对象保存在会话中。 任何人都可以建议我应该使用两个选项中的哪一个,原因是什么?

  • 我试图从python向json文件发送一个简单的字典,但我一直收到“TypeError:1425不是json可序列化的”消息。 如果我添加默认参数,那么它会写入,但整数值会作为字符串写入json文件,这是不可取的。

  • 问题内容: 我有以下用于序列化查询集的代码; 以下是我的 我需要序列化。但是它说无法序列化。因为列表由Django对象和字典组成。有任何想法吗 ? 问题答案: 并且不能很好地与Django对象配合使用。 Django的内置序列化器只能序列化由django对象填充的查询集: 在您的情况下,其中包含django对象和dict的混合。 一种选择是摆脱中的模型实例,并使用dict将其替换为: 希望有帮助。

  • 在使用Python查询文档上的聚合函数之后,我从MongoDB返回的响应返回了有效响应,我可以打印它,但无法返回它。 错误: 打印: 但当我试图返回时: 这是一个完整的电话: 数据库连接良好,收集也在那里,我得到了有效的预期结果,但当我试图返回它给我Json错误。任何想法如何将响应转换回JSON。谢啦