Django-приложение на PostgreSQL в Ubuntu 14.04
Python, Ubuntu | Комментировать запись
Django – это гибкий фреймворк для быстрой разработки приложений Python. По умолчанию Django использует для хранения данных легковесную СУБД SQLite, которая не всегда справляется с нагрузками масштабных приложений. Поэтому её рекомендуется заменить более прочной системой управления базами данных.
Данное руководство продемонстрирует установку PostgreSQL и настройку Django для использования этой СУБД, включая такие этапы:
- Установку всего необходимого программного обеспечения;
- Создание учётных данных БД;
- Запуск и настройку Django-проекта для использования PostgreSQL на бэкэнде.
Требования
Для выполнения руководства понадобится свежий предварительно настроенный сервер Ubuntu 14.04. Также нужен не-root пользователь с привилегиями sudo. Подробнее обо всём этом можно прочесть в руководстве «Начальная настройка сервера Ubuntu 14.04».
Установка зависимостей
Для начала нужно установить недостающее программное обеспечение (менеджер пакетов pip, базу данных и связующие библиотеки) из репозиториев.
Чтобы установить эти программы, используйте команду apt:
sudo apt-get update
sudo apt-get install python-pip python-dev libpq-dev postgresql postgresql-contrib
После завершения установки приступайте к созданию БД и пользователя для неё.
Создание базы данных и пользователя
Для локальных соединений PostgreSQL по умолчанию использует схему так называемой «одноранговой аутентификации» (англ. peer authentication). В целом, это означает, что если имя пользователя операционной системы совпадает с именем валидного пользователя Postgres, данный системный пользователь может войти в СУБД без дальнейшей аутентификации.
При установке PostgreSQL был создан пользователь операционной системы по имени postgres, что совпадает с пользователем postgres – администратором системы PostgreSQL. Измените пользователя и войдите как postgres:
sudo su - postgres
Это откроет сессию оболочки пользователя postgres. Запустите сессию PostgreSQL:
psql
Итак, сначала нужно создать БД для проекта Django. Каждый проект должен иметь индивидуальную базу данных. В данном руководстве БД условно называется myproject, но лучше использовать более описательное имя.
CREATE DATABASE myproject;
Примечание: Все команды SQL оканчиваются символом точки с запятой.
Теперь нужно создать пользователя БД для подключения и взаимодействия с ней. Задайте надёжный пароль:
CREATE USER myprojectuser WITH PASSWORD 'password';
Затем нужно изменить параметры подключения для только что созданного пользователя. Это позволит ускорить выполнение операций базы данных, при этом значения не придётся запрашивать при установке каждого соединения.
Установите UTF-8 как кодировку по умолчанию, чего требует Django. Также установите схему по умолчанию изоляции транзакций «read committed», которая блокирует считывание с незавершенных транзакций. В завершение нужно установить часовой пояс. По умолчанию проекты Django будут использовать UTC.
ALTER ROLE myprojectuser SET client_encoding TO 'utf8';
ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed';
ALTER ROLE myprojectuser SET timezone TO 'UTC';
Теперь нужно передать права на доступ к этой базе данных новому пользователю:
GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;
Закройте командную строку SQL и вернитесь в сессию оболочки пользователя postgres:
\q
Затем закройте сессию postgres и вернитесь в оболочку обычного пользователя:
exit
Установка Django в virtualenv
Теперь БД полностью готова к работе, можно переходить к установке Django. Виртуальное окружение (или виртуальная среда) позволяет сделать установку Django и зависимостей более гибкой.
Чтобы скачать пакет virtualenv, введите:
sudo pip install virtualenv
Создайте каталог для хранения проекта Django и откройте его:
mkdir ~/myproject
cd ~/myproject
Теперь нужно создать виртуальную среду для хранения зависимостей проекта Django:
virtualenv myprojectenv
Это установит локальную копию Python и pip в каталог myprojectenv, который находится в каталоге проекта.
Прежде чем устанавливать приложения в виртуальную среду, нужно активировать её:
source myprojectenv/bin/activate
Командная строка изменит внешний вид; этозначит, что виртуальное окружение успешно включено:
myprojectenv)user@host:~/myproject$
Теперь можно установить Django при помощи pip. Также нужно установить пакет psycopg2, позволяющий использовать предварительно настроенную БД:
pip install django psycopg2
Запустите проект Django в каталоге myproject. Это создаст одноимённый дочерний каталог для хранения кода и скрипт внутри этого каталога. Обратите внимание: команда заканчивается символом точки:
django-admin.py startproject myproject .
Настройка базы данных Django
Теперь, когда проект готов, нужно настроить созданную для него базу данных.
Откройте главный конфигурационный файл проекта Django, расположенный в дочернем каталоге:
nano ~/myproject/myproject/settings.py
В конце файла найдите раздел DATABASES:
. . .
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
. . .
На данный момент он настроен для использования базы данных SQLite. Это нужно изменить, указав вместо SQLite систему PostgreSQL.
Для начала измените значение engine, указав в качестве бэкэнда postgresql_psycopg2 вместо sqlite3. В строке NAME укажите имя базы данных (в данном случае – myproject). Также нужно указать учётные данные и добавить опцию port, но оставить её незаполненной, что задаст настройку по умолчанию.
. . .
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'myproject',
'USER': 'myprojectuser',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '',
}
}
. . .
Сохраните и закройте файл.
Миграция базы данных и тестирование проекта
Теперь Django полностью настроен для взаимодействия с БД. Мигрируйте данные в БД и протестируйте сервер.
Для начала создайте миграции для БД. Поскольку на этот момент фактических данных ещё не существует, это просто мигрирует исходную структуру БД:
cd ~/myproject
python manage.py makemigrations
python manage.py migrate
Затем создайте учётную запись администратора:
python manage.py createsuperuser
При этом будет предложено выбрать имя, указать электронный адрес и создать пароль. Затем протестируйте настройки, запустив сервер разработки Django:
python manage.py runserver 0.0.0.0:8000
В браузере посетите домен или IP, указав порт :8000, что откроет стандартную страницу Django:
На экране появится стандартная приветственная страница:
It worked!
Congratulations on your first Django-powered page.
…
Добавьте к ссылке секцию /admin, чтобы получить доступ к странице входа в интерфейс администратора.
Заполните появившиеся на экране поля, указав имя и пароль только что созданной учётной записи администратора при помощи команды
createsuperuser
после чего на экране появится интерфейс администратора.
Завершив проверку, остановите сервер разработки, нажав CTRL-C в окне терминала.
Получив доступ к интерфейсу, вы убедились, что БД хранит информацию проекта и взаимодействует с ним.
Заключение
Конечно, БД SQLite очень проста в использовании и без труда справляется с нагрузкой на этапе разработки. Но всё же в большинстве случаев её ресурсов на этапе производства оказывается недостаточно, потому рекомендуется использовать в качестве бэкэнда полнофункциональную базу данных, например, PostgreSQL.
Tags: Django, PostgreSQL, Python, Ubuntu 14.04