【问题标题】:Using sessions with mongoengine in Django 1.9在 Django 1.9 中使用带有 mongoengine 的会话
【发布时间】:2016-06-07 15:22:29
【问题描述】:

我需要在 Django 上使用 noSQL 数据库,在非官方的 mongo 插件列表中,我决定使用旧版 mongoengine 0.9,因为它的反馈良好且比较全面documentation

经过几天的反复试验,我能够连接到我的 mongoDB,创建自定义用户模型(文档),将用户保存在 DB 中,甚至可以使用 Django 的身份验证功能,如 authenticate()set_password()

当我尝试使用login(request,user) 时出现问题。在该方法中崩溃的行包括:

  1. request.session[SESSION_KEY] = user._meta.pk.value_to_string(user),假设 mongo 用户文档在 meta 中没有属性 pk。我可以通过直接将其更改为 user.id 来解决这个问题,将 Mongo 的默认 ID 设置为 SESSION_KEY

  2. return get_user_model()._meta.pk.to_python(request.session[SESSION_KEY])_get_user_session_key(request)。这会抛出一个ValidationError,上面写着{{id}} must be an integer。在 shell 上转储 get_user_model() 会返回一个 mongo_auth.MongoUser 并且其 _meta.pk 读取为 (AutoField id),这解释了为什么 to_python 需要一个整数值。

实际上有使用 Django 会话的 mongoengine 方法吗?我在settings.py 中将mongoengine.django.sessions 设置为会话引擎,但不确定是否还有其他需要做的事情。

在处理 mongoengine 的错误时,我实际上对它在 Django 中的稳定性感到非常不相信,我应该考虑其他更好的选择吗?

【问题讨论】:

  • 你使用的是哪个 Django 版本?
  • @PetarP 这是问题所在,Django 1.9
  • 让我回复你这个问题,但重点是 mongoengine 是为 django 1.5 构建的。
  • @PetarP 难怪。我还看到他们已经停止了对新版本的 django 支持。我刚刚分叉了 repo,希望能找到解决方法。感谢您的帮助:)
  • 没问题,投票吧。

标签: python django session authentication mongoengine


【解决方案1】:

mongoengine v0.9 是为 Django 1.5 构建的,从 v0.10 开始,Django 支持已与 mongoengine 存储库分开。

这是当前 repo 用于支持 Django 1.9 的地方:https://github.com/MongoEngine/django-mongoengine。该插件仍需要测试,但到目前为止 auth 和 session 在我的项目上运行良好。

关于这个主题的讨论将在 repo 的问题跟踪器上继续。欢迎加入并做出贡献。

【讨论】:

  • 你是说安装 django_mongoengine 解决了 request.session[SESSION_KEY] 整数问题?
  • Tough django_mongoengine 解决了 _meta 丢失的 pk 属性,我仍然收到验证错误,(您的第二个错误)在 get_user_model()._meta.pk.to_python(request.session[SESSION_KEY]) 中,说 id 必须是整数。您找到了解决方案吗?
  • @SergiuZaharie 为我切换到 django-mongoengine 后,这两个错误都得到了修复。您是否继承了默认的User 模型并覆盖了id 属性?
猜你喜欢
  • 2016-11-14
  • 2017-01-27
  • 1970-01-01
  • 1970-01-01
  • 2019-06-06
  • 1970-01-01
  • 2011-04-11
  • 2011-09-03
  • 1970-01-01
相关资源
最近更新 更多