【发布时间】:2016-06-07 15:22:29
【问题描述】:
我需要在 Django 上使用 noSQL 数据库,在非官方的 mongo 插件列表中,我决定使用旧版 mongoengine 0.9,因为它的反馈良好且比较全面documentation。
经过几天的反复试验,我能够连接到我的 mongoDB,创建自定义用户模型(文档),将用户保存在 DB 中,甚至可以使用 Django 的身份验证功能,如 authenticate()、set_password()。
当我尝试使用login(request,user) 时出现问题。在该方法中崩溃的行包括:
request.session[SESSION_KEY] = user._meta.pk.value_to_string(user),假设 mongo 用户文档在meta中没有属性pk。我可以通过直接将其更改为user.id来解决这个问题,将 Mongo 的默认 ID 设置为SESSION_KEY。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