Django-приложение на PostgreSQL в Ubuntu 14.04

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: , , ,

Добавить комментарий