Российский Новый Университет
Опубликован: 25.01.2016 | Доступ: свободный | Студентов: 2234 / 161 | Длительность: 16:40:00
Лекция 11:

Подключение к базе данных

Django с NoSQL

Django официально не поддерживает базы данных NoSQL, но имея в запасе такое большое сообщество разработчиков, Джанго имеет форк с MongoDB в качестве внутренней базы данных.

Для того, чтобы вам продемонстрировать работу, мы будем использовать проект Django-Norel для настройки Django с базой данных MongoDB.

Вы можете найти подробную информацию об этом на http://django-nonrel.org/.

MongoDB можно установить, выполнив шаги, указанные на http://docs.mongodb.org/manual/installation/ отталкиваясь от конфигурации, которая у вас есть.

Сейчас, мы настроим MongoDB для Debian- версии Linux (в частности, Ubuntu).

Импортируйте открытый ключ GPG MongoDB:

sudo apt-key adv--keyserver hkp://keyserver.ubuntu.com:80--recv 7F0CEB10

Создайте файл списка для MongoDB:

echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist lOgen' | sudo tee /etc/apt/sources.list.d/mongodb.list

Перезагрузите локальный пакет базы данных:

sudo apt-get update

Установите пакеты MongoDB:

sudo apt-get install -y mongodb-org

Запустите MongoDB:

sudo service mongod start

Проект одностраничного приложения – сокращатель URL-ссылок

Существует два способа, которыми MongoDB может использоваться совместно c Django, которые заключаются в следующем:

  • MongoEngine: Это Документ-объектное отображение (думается это ORM, но для документальных баз данных), которое используется для работы с MongoDB из-под Python
  • Django-nonrel: Это проект для поддержки Django на нереляционных (NoSQL) базах данных; в настоящее время он поддерживает MongoDB

MongoEngine

Прежде чем двигаться дальше и показать вам, как настроить MongoEngine на совместную работу с Django, нам требуется установка MongoEngine. Установите MongoEngine, введя следующую команду:

pip install mongoengine

Для того чтобы защитить предыдущего проект, который мы создали и добиться лучшего понимания, мы создадим отдельный новый проект для конфигурации MongoDB, и мы используем наш существующий проект для настройки MySQL:

django-admin.py startproject url_shortner
cd url_shortner
python manage.py startapp url

Это создаст базовую структуру проекта, как мы очень хорошо знаем.

Подключение MongoDB совместно с Django

Нам придется изменить файл, settings.py, и если мы используем только MongoDB для проекта, что верно в данном случае, то мы можем игнорировать стандартный параметр базы данных. Все, что мы должны сделать - вызвать метод connect () на файл settings.py.

Мы разместим пустой внутренний интерфейс для MongoDB. Просто замените следующий код в файле settings.py, которое выглядит следующим образом:

DATABASES = {
'default' : {
'ENGINE':	'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}

Замените предыдущий код следующим:

DATABASES = {
'default' : {
'ENGINE':	'django.db.backends.dummy'
}
}

Аутентификация в Django

Преимуществом MongoEngine является, что он включает внутренний интерфейс аутентификации Django.

Модель пользователя становится документом MongoDB и имплементирует большинство методов и атрибутов нормальной модели пользователя Django , что делает MongoEngine совместимым с Django. Мы также можем использовать инфраструктуру аутентификации и декораторов, такие, как методы login_required () и authentication().Модуль auth также содержит метод get_user (), который принимает идентификатор пользователя в качестве аргумента и возвращает объект пользователя.

Для включения этого внутреннего интерфейса для MongoEngine, добавьте следующую запись в файл settings.py:

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

Хранение сеанса

В Django можно использовать различные базы данных для хранения сеанса приложения .Чтобы включить сеанс MongoEngine, который хранится в MongoDB, должна быть запись параметра django.contrib.sessions.middleware SessionMiddleware в MlDDLEWARE_CLASSES в файле settings.py. Также должна быть запись о django.contrib.sessions в INSTALLED_APPS, которая уже есть, так как мы начали проект с основной структуры Django.

Теперь все, что вам нужно сделать это добавить следующую строку в файл settings.py:

SESSION_ENGINE = 'mongoengine.django.sessions'
SESSION_SERIALIZER = 'mongoengine.django.sessions.BSONSerializer'

Сейчас мы все настроили для небольшого демонстрационного проекта, где мы имплементируем проект сокращателя URL-адресов на MongoDB.

Давайте создадим сперва URL-модель, в которой мы будем хранить все длинные и соответствующие им короткие URL-адреса.

Перейдите к файлу url/models.py:

from django.db import models 
from mongoengine import * 
connect('urlShortener')

Вы уже знакомы с двумя строками предыдущего кода, которые импортирует модули.

Третья строка, то есть, connect('urlShortener'), соединяет Django с базой данных MongoDB с именем urlShortener.

MongoDB предоставляет много механизмов подключения, и вы можете выбрать , как, в следующем фрагменте:

from mongoengine import connect
 connect('project')
Константин Боталов
Константин Боталов

Вроде легкие вопросы и ответы знаю правильные, но система считает иначе и правильные ответысчитает неправильными. Приходится выполнть по несколько раз. Это я не правильно делаю или тест так составлен?

Владимир Филипенко
Владимир Филипенко

Листинг показывает в 4-ой лекции, что установлен Django 1.8.4. Тут же далее в этой лекции указаны настройки, которые воспринимает Django 1.7 и младше.