我需要在Django上使用noSQL数据库,在非官方mongo插件列表中,由于其良好的反馈和相对全面的documentation,我决定使用传统的mongoengine 0.9。
经过几天的试验和错误,我能够连接到我的mongoDB,创建自定义用户模型(文档),将用户保存在DB中,甚至使用Django的auth函数,如authenticate()
,{{1 }}
当我尝试使用set_password()
时出现问题。在该方法中崩溃的行包括:
login(request,user)
,因为mongo用户文档在request.session[SESSION_KEY] = user._meta.pk.value_to_string(user)
中没有属性pk
。我可以直接将其更改为meta
,将Mongo的默认ID设置为user.id
。
SESSION_KEY
中 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)
需要一个整数值。
实际上是否有使用Django会话的mongoengine方式?我已在to_python
中将mongoengine.django.sessions
设置为会话引擎,但不确定是否还需要其他任何内容。
在处理mongoengine错误的这一点上,我实际上对Django的稳定性感到十分不确定,还有其他更好的选择吗?
答案 0 :(得分:0)
mongoengine
v0.9是为Django 1.5构建的,自v0.10起,Django支持已从mongoengine
repo中分离出来。
这是当前回购支持Django 1.9的地方:https://github.com/MongoEngine/django-mongoengine。该插件仍然需要测试,但到目前为止,auth和session在我的项目中运行良好。
有关此主题的讨论将继续在回购问题跟踪器上进行。随意加入并贡献。