在Django 1.9中使用与mongoengine的会话

时间:2016-02-25 02:55:05

标签: python django session authentication mongoengine

我需要在Django上使用noSQL数据库,在非官方mongo插件列表中,由于其良好的反馈和相对全面的documentation,我决定使用传统的mongoengine 0.9。

经过几天的试验和错误,我能够连接到我的mongoDB,创建自定义用户模型(文档),将用户保存在DB中,甚至使用Django的auth函数,如authenticate(),{{1 }}

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

  1. login(request,user),因为mongo用户文档在request.session[SESSION_KEY] = user._meta.pk.value_to_string(user)中没有属性pk。我可以直接将其更改为meta,将Mongo的默认ID设置为user.id

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

  4. 实际上是否有使用Django会话的mongoengine方式?我已在to_python中将mongoengine.django.sessions设置为会话引擎,但不确定是否还需要其他任何内容。

    在处理mongoengine错误的这一点上,我实际上对Django的稳定性感到十分不确定,还有其他更好的选择吗?

1 个答案:

答案 0 :(得分:0)

mongoengine v0.9是为Django 1.5构建的,自v0.10起,Django支持已从mongoengine repo中分离出来。

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

有关此主题的讨论将继续在回购问题跟踪器上进行。随意加入并贡献。