2016-02-25 2 views
2

Мне нужно использовать базу данных noSQL на Django, и среди списка неофициальных плагинов mongo я решил пойти с устаревшим mongoengine 0.9 из-за хорошей обратной связи и относительно всеобъемлющего documentation.Использование сессий с mongoengine в Django 1.9

После нескольких дней проб и ошибок, я могу подключиться к моему mongoDB, создать пользовательскую модель (документ), сохранить пользователя в БД и даже использовать функцию аутентификации Django, такую ​​как authenticate(), set_password().

Проблема возникает, когда я пытаюсь использовать login(request,user). Линия, которая выходит из строя в этом методе включает в себя:

  1. request.session[SESSION_KEY] = user._meta.pk.value_to_string(user), учитывая, что документ пользователь Монго не имеет атрибут pk в meta. Я могу пройти через это, изменив его на user.id напрямую, установив id по умолчанию Mongo как 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. Dumping get_user_model() на shell возвращает mongo_auth.MongoUser и его _meta.pk читает (AutoField id), что объясняет, почему to_python ожидает целочисленное значение.

Есть ли способ использования mongoengine для использования сеанса Django? Я установил mongoengine.django.sessions в качестве механизма сеанса в своем settings.py, но не уверен, что мне нужно что-то еще сделать.

На этом этапе обработки ошибок mongoengine, я действительно чувствую себя совершенно неуверенным в своей стабильности с Django, есть ли другой лучший вариант, который я должен рассмотреть?

+0

Какую версию Django вы используете? – PetarP

+0

@PetarP это в вопросе, Django 1.9 – tropicalfish

+0

Позвольте мне ответить вам на этот вопрос, но дело в том, что 'mongoengine' построен для' django 1.5'. – PetarP

ответ

0

mongoengine v0.9 построен для Django 1.5, а поддержка Django отделена от mongoengine repo с v0.10.

Настоящий репо предназначен для поддержки Django 1.9: https://github.com/MongoEngine/django-mongoengine. Плагин по-прежнему требует тестирования, но до сих пор auth и session хорошо работают в моем проекте.

Дискуссия по этой теме будет продолжена в журнале отслеживания вопросов репо. Не стесняйтесь вступать и вносить свой вклад.

+0

Вы говорите, что установка django_mongoengine исправила проблему request.session [SESSION_KEY] целых чисел? – sergiuz

+0

Tough django_mongoengine разрешил атрибут mising pk от _meta, я все еще получаю ошибку проверки (вторая ошибка) в get_user_model() ._ meta.pk.to_python (request.session [SESSION_KEY]), говоря, что id должен быть целым. Вы нашли решение для этого? – sergiuz

+0

@SergiuZaharie обе ошибки были исправлены после переключения на django-mongoengine для меня. Вы наследовали модель 'User' по умолчанию и переопределили атрибут id? – tropicalfish