Django — гибкий фреймворк для быстрого создания приложений на Python. По умолчанию в качестве базы данных он использует SQLite. Это хорошо работает при небольших нагрузках, однако традиционная система управления базами данных может повысить производительность в рабочей среде. В статье разберём, как использовать PostgreSQL с Django.
Вам понадобится
-
сервер Ubuntu 22.04;
-
пользователь с привилегиями sudo.
Чтобы начать работу, войдите в систему как пользователь sudo.
Шаг 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 может справиться с нагрузкой во время разработки и использования в малой рабочей среде, большинство проектов выигрывают от внедрения полнофункциональной системы управления базами данных.
ссылка на оригинал статьи https://habr.com/ru/company/southbridge/blog/719116/
Добавить комментарий