[Перевод] Как использовать PostgreSQL с Django в Ubuntu 22.04
Django — гибкий фреймворк для быстрого создания приложений на Python. По умолчанию в качестве базы данных он использует SQLite. Это хорошо работает при небольших нагрузках, однако традиционная система управления базами данных может повысить производительность в рабочей среде. В статье разберём, как использовать PostgreSQL с Django.
Вам понадобится
Чтобы начать работу, войдите в систему как пользователь sudo.
«PostgreSQL База»
Шаг 1: установка компонентов из репозиториев Ubuntu
Сначала обновим кэш менеджера пакетов с помощью apt:
sudo apt update
Затем установим необходимые компоненты: pip (менеджер пакетов Python), Postgres и связанные с ним библиотеки:
sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib
Теперь можем переходить к созданию базы данных.
Шаг 2: создание базы данных и пользователя базы данных
По умолчанию Postgres использует схему »одноранговой аутентификации» для локальных подключений. Это значит, что если имя пользователя операционной системы совпадает с действительным именем пользователя Postgres, этот пользователь может войти в систему без дополнительной аутентификации.
Во время установки Postgres был создан пользователь операционной системы с именем postgres, соответствующий пользователю-администратору postgres. Нужно использовать этот пользовательский postgres для выполнения административных задач. Применим sudo
для передачи имени пользователя postgres
вместе с параметром-u
.
Войдём в интерактивную строку Postgres:
sudo -u postgres psql
Затем создадим базу данных для проекта Django. По соображениям безопасности каждый проект должен иметь собственную изолированную базу данных. В этой статье база данных называется myproject, но в работе рекомендуем давать ей более описательные названия. Также обращаем внимание на то, что важно не забывать заканчивать команды в командной строке SQL точкой с запятой — ;
:
CREATE DATABASE myproject;
Создадим пользователя базы данных, который будет подключаться к БД и взаимодействовать с ней. Установим надёжный пароль:
CREATE USER myproject_user WITH PASSWORD 'myproject_database_password';
После изменим несколько параметров подключения для созданного пользователя. Это позволит ускорить операции с базой данных, благодаря чему не придётся запрашивать и устанавливать правильные значения каждый раз при установлении соединения. Сначала установим кодировку по умолчанию на UTF-8:
ALTER ROLE myproject_user SET client_encoding TO 'utf8';
Затем установим схему изоляции транзакций по умолчанию на чтение с фиксацией, блокирующее чтение из незафиксированных транзакций:
ALTER ROLE myproject_user SET default_transaction_isolation TO 'read committed';
Установим часовой пояс. По умолчанию в проекте Django настроено использование UTC:
ALTER ROLE myproject_user SET timezone TO 'UTC';
И предоставим пользователю базы данных права доступа к созданной базе данных:
GRANT ALL PRIVILEGES ON DATABASE myproject TO myproject_user;
Выйдем из командной строки SQL, чтобы вернуться в сеанс пользователя postgres:
\q
Теперь можем переходить к установке Django.
Шаг 3: установка Django в виртуальной среде
Для большей гибкости установим Django и все его зависимости в виртуальной среде Python.
Virtualenv — инструмент, который позволяет создавать изолированные среды для отдельных проектов Python и тем самым решает проблему зависимостей и совместимости приложений разных версий. Установим его с помощью команды:
sudo pip install virtualenv
Затем создадим каталог для хранения проекта Django:
mkdir ~/myproject
И переместимся в каталог:
cd ~/myproject
Теперь можем создать виртуальную среду для хранения зависимостей Python проекта Django:
python3 -m virtualenv myprojectenv
Команда установит локальную копию Python и pip
в каталог с именем myprojectenv в каталоге вашего проекта.
Прежде чем устанавливать приложения в виртуальной среде, её нужно активировать. Это можно сделать с помощью команды:
source myprojectenv/bin/activate
Командная строка изменится, тем самым показав, что вы сейчас работаете в виртуальной среде.
Как только виртуальная среда станет активной, переходим к установке Django с помощью pip
. Также установим пакет psycopg2
, который позволит использовать настроенную базу данных:
pip install Django psycopg2
Примечание: вне зависимости от того, какую версию Python вы используете, при активации виртуальной среды следует использовать команду pip
вместо pip3
.
Теперь можем запустить проект Django в каталоге myproject. Это создаст дочерний каталог с тем же именем для хранения кода, а также сценарий управления в текущем каталоге.
django-admin startproject myproject .
Шаг 4: настройка параметров базы данных Django
С помощью текстового редактора откроем основной файл настроек проекта Django, расположенный в каталоге дочернего проекта. В нашем примере используется nano
:
nano ~/myproject/myproject/settings.py
В нижней части файла есть раздел DATABASES
, который в настоящее время настроен на использование SQLite:
. . .
# Database
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
. . .
Нужно изменить это, чтобы использовать Postgres.
Во-первых, изменим движок так, чтобы он использовал адаптер postgresql
вместо серверной части sqlite3
. В качестве NAME
укажем имя базы данных. Затем добавим учётные данные для входа — имя пользователя, пароль и хост для подключения. Параметр port оставим пустым, чтобы было выбрано значение по умолчанию:
. . .
# Database
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'myproject',
'USER': 'myproject_user',
'PASSWORD': 'myproject_database_password',
'HOST': 'localhost',
'PORT': '',
}
}
. . .
Также необходимо настроить директиву ALLOWED_HOSTS
. Она определяет список адресов или доменных имен, разрешённых для подключения к инстансу Django. Любые входящие запросы с заголовком Host
, которых нет в этом списке, будут исключены. Это необходимо для предотвращения уязвимостей в системе безопасности.
В квадратных скобках перечислим IP-адреса или доменные имена, которые связаны с сервером Django. Каждый элемент должен быть указан в кавычках и отделён запятой. Если хотите запросить весь домен и любые поддомены, добавьте точку к началу записи.
Добавим доменные имена и IP-адреса сервера Django следующим образом: ALLOWED_HOSTS = [ 'your_domain', '203.0.113.5']
. Если хотите ответить на your_domain
и любые поддомены, начните домен с точки .
: ALLOWED_HOSTS = ['.your_domain', '203.0.113.5']
.
Например:
. . .
ALLOWED_HOSTS = ['your_server_domain_or_IP']
. . .
Когда закончите, сохраните и закройте файл. Если используете nano, нажмите CTRL+X, затем y и затем ENTER.
Шаг 5: миграция базы данных и тестирование проекта
Начнём с создания и применения миграций к базе данных. Поскольку у нас ещё нет никаких данных, это настроит первоначальную структуру базы данных. Убедимся, что мы находимся в каталоге myproject:
cd ~/myproject
Затем выполним и применим миграцию:
python manage.py makemigrations
python manage.py migrate
После создания структуры базы данных создадим учётную запись администратора:
python manage.py createsuperuser
Нам будет предложено выбрать имя пользователя. Можем оставить это поле пустым, чтобы использовать имя пользователя, связанное с сервером. Затем укажем адрес электронной почты и создадим пароль для учётной записи.
Прежде чем получить доступ к серверу разработки Django, проверим подключение к базе данных. Откроем порт в брандмауэре, чтобы разрешить внешние подключения:
sudo ufw allow 8000
Как только откроется порт, проверим корректность работы базы данных, запустив сервер Django:
python manage.py runserver 0.0.0.0:8000
В веб-браузере перейдём на доменное имя или IP-адрес сервера, за которым следует :8000:
http://server_domain_or_IP:8000
Добавим /admin
в конец URL-адреса, чтобы получить доступ к форме входа в интерфейс администратора:
Введём имя пользователя и пароль, которые создали с помощью команды createsuperuser
. И попадём в интерфейс администратора:
Чтобы остановить сервер разработки, нажмите CTRL + C в окне терминала.
Переходя в интерфейс администратора, мы подтверждаем, что в базе данных хранится информация об учётной записи пользователя и что к ней можно получить соответствующий доступ.
Заключение
В этой статье мы разобрали, как установить и настроить PostgreSQL в качестве серверной базы данных для проекта Django. Хотя SQLite может справиться с нагрузкой во время разработки и использования в малой рабочей среде, большинство проектов выигрывают от внедрения полнофункциональной системы управления базами данных.
«Python-разработчик»