2015-08-13 3 views
3

Я хочу использовать базу данных mongodb вместе с каркасом django. Для этого я попытался создать небольшой тестовый проект с использованием mongoengine и этого описания: http://staltz.com/djangoconfi-mongoengine/#/8Как использовать django вместе с mongoengine?

К сожалению, это не работает. Соответствующие части моего settings.py, views.py и models.py смотрят как это:

settings.py:

# Build paths inside the project like this: os.path.join(BASE_DIR, ...) 
import os 
import mongoengine 

[...] 

# Application definition 

INSTALLED_APPS = (
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'testApp', 
) 
[...] 

# Database 
# https://docs.djangoproject.com/en/1.8/ref/settings/#databases 

DATABASES = { 
    'default': { 
     'ENGINE': '', 
    } 
} 

SESSION_ENGINE = 'mongoengine.django.sessions' 

_MONGODB_USER = 'mongouser' 
_MONGODB_PASSWD = 'test' 
_MONGODB_HOST = 'localhost' 
_MONGODB_NAME = 'testDb' 
_MONGODB_DATABASE_HOST = \ 
    'mongodb://%s:%[email protected]%s/%s' \ 
    % (_MONGODB_USER, _MONGODB_PASSWD, _MONGODB_HOST, _MONGODB_NAME) 

mongoengine.connect(_MONGODB_NAME, host=_MONGODB_DATABASE_HOST) 

AUTHENTICATION_BACKENDS = (
    'mongoengine.django.auth.MongoEngineBackend', 
) 

models.py

from mongoengine import * 

# Create your models here. 
class Choice(Document): 
    choice_text = StringField(max_length=200) 

views.py

from django.shortcuts import render 
from django.http import HttpResponse 
from testApp.models import Choice 
from django.contrib.auth import authenticate 

def index(request): 
    newChoice = Choice(choice_text="First test") 
    newChoice.save() 
    return HttpResponse("Test") 

user = authenticate(username='mongouser', password='test') 
assert isinstance(user, mongoengine.django.auth.User) 

Когда я запускаю тестовый сервер и открываю сайт testApp, я получаю модуль ImportError: No под именем django.sessions. Поэтому я удалил часть SESSION_ENGINE из моего settings.py, который был помечен как дополнительный в описании выше. Впоследствии я получаю ошибку «Нет модуля с именем django.auth».

У вас есть идея, что происходит не так и как настроить django вместе с mongoengine, чтобы использовать базу данных mongodb?

+0

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

+0

Извините за поздний ответ. Я не имел доступа к машине за выходные: Джанго 1.8.2 mongoengine 0.10.0 PyMongo 3.0.2 Но на самом деле я не использую PyMongo. – Flo1895

+0

Можете ли вы сказать мне, откуда вы находите _MONGODB_PASSWD и _MONGODB_USER? @ rahul-gupta –

ответ

0

Существует некоторая проблема с использованием последней версии pymongo с Django.

Попробуйте понизить рейтинг pymongo до 2.8 и он должен работать.

4

это here. с mongoengine 0.10 мы видим, что /usr/lib/python2.7/site-packages/mongoengine/ не будет иметь пакет django. Установите mongoengine 0.9, используя sudo pip install mongoengine == 0.9 и пакет django (поддержка или расширение).

0

Я хочу использовать базу данных MongoDB вместе с каркасом Джанго

Если это ваша цель Есть несколько способов сделать это. В зависимости от стратегии, которую вы принимаете, делайте ставку на компромисс.

Используйте совместимую модель рамки MongoDB (MongoEngine): Вы можете полностью избежать использования моделей Django в проекте и использовать MongoEngine или Ming в вас Джанго проектов. Однако пропустят: 1500+ core contributors к проекту, ежечасные исправления и разрешение билетов, ускоряются опыт существующих моделей Django и наращиваются новые рамки модели. Пропустите в моделях Contributor Django, таких как Admin, Sessions, Users, Auth и т. Д., Создайте модули для своего проекта.

Django SQL в MongoDB transpiler - Djongo: Перевести синтаксис запроса Django SQL порожденную Django ORM в команды PyMongo. Djongo - один из таких SQL-запросов для компилятора запросов MongoDB. Он переводит каждую строку запроса SQL в документ запроса mongoDB. В результате все модели Django и связанные с ними модули работают так, как есть.

Смежные вопросы