Как стать автором
Поиск
Написать публикацию
Обновить
91.37
Amvera
Amvera — облако для хостинга IT-приложений

Всё о Directus. От установки до настройки

Время на прочтение9 мин
Количество просмотров1.5K

Directus — это open‑source платформа для управления данными, которая превращает любую SQL‑базу в headless CMS, предоставляя автоматическую REST и GraphQL API и удобный веб-интерфейс для управления контентом.

Она устанавливается поверх существующей базы данных и не требует её миграции — Directus быстро строит схему, интерфейс и API на лету, позволяя пользователям работать с данными через визуальную Data Studio.

В статье я рассмотрю пример базовой настройки Directus.

Установка Directus

Развернём мы Directus в Amvera Cloud, где Directus является преднастроенным сервисом.

Преднастроенные сервисы нам дают возможность развернуть и обновлять Directus одним действием из интерфейса, а также бесплатный домен с SSL.

  1. Переходим в личный кабинет Amvera Cloud (при регистрации будет 111 р. на тест, что позволит начать без пополнения аккаунта).

  2. В панели снизу выбираем Directus.

  3. Вводим название и выбираем тариф.

  4. В переменных окружения обязательно введите key, secret — случайные значения и admin_email, admin_pass — данные администратора.

  5. Ожидаем запуска сервиса около 1 минуты. Готово, мы имеем рабочий сервис  и можем приступить к работе.

Переходим к проекту, открываем раздел «Домены».

Активируем бесплатный домен с SSL.

Кликаем по доступному домену и переходим в интерфейс Directus.

Вы должны попасть на страницу входа. Здесь мы получаем доступ к веб-интерфейсу Data Studio — визуальному рабочему пространству для управления данными. При первом входе используйте учётные данные администратора (ADMIN_EMAIL/ADMIN_PASSWORD).

После авторизации интерфейс предлагает модули для настройки коллекций, просмотра и редактирования контента, управления ролями и автоматизацией.

Меню Directus
Меню Directus

Создание коллекции в Directus

Коллекции в Directus — это аналоги таблиц в реляционной базе данных. Они представляют собой структурированные наборы данных, где:

Каждая коллекция представляет собой подобие таблицы в БД (например: products, users, articles), каждый элемент такой коллекции является записью в таблице (например: конкретный товар, пользователь). 

Поля коллекции выполняют аналогичную роль, как и колонки таблицы (например: title, price).

Функционал нашего проекта будет представлять собой две коллекции, посредством связи которых мы будем принимать и использовать данные из одной коллекции в другой.

В одной коллекции будут создаваться пользователи (авторы статей), а во второй пользователи смогут создавать свои статьи, ссылаясь на cвои профиля из первой коллекции.

Для создания коллекции нажимаем Create Collection, после чего открывается окно, где нужно ввести yказание коллекции (пример — “articles”) и указать тип нашей коллекции: 

Создание коллекции Directus
Создание коллекции Directus

Singleton — это особый тип коллекции в Directus, которая всегда содержит только одну запись. Такие коллекции используются для хранения единичных сущностей (настройки, глобальные параметры, конфигурации). Они доступны через специальный API-endpoint без указания ID. 

Так как в нашей коллекции мы будем создавать множественные записи, то Singletion оставляем выключенным.

Далее переходим к настройке дополнительных полей при создании коллекции в Directus во вкладке «Optional Fields»

Стандартные системные поля:

Поле status имеет тип данных String. Используется для workflow (например: «черновик», «опубликовано», «архив»), можно редактировать через API/интерфейс.

Поле sort имеет тип данных Integer. Используется для ручной сортировки записей (перетаскиванием в интерфейсе), можно редактировать напрямую.

Поля метаданных:

Опция date_created добавляет поле date_created (DateTime), в котором указывается дата создания коллекции. Автоматически заполняется при первом сохранении записи.

Опция user_created добавляет поле user_created (User), отображающая связь с пользователем‑создателем. Заполняется при создании записи (берётся текущий авторизованный пользователь). Отображается как ссылка на профиль пользователя, например: «Admin», в расширенном виде — с аватаркой и email (в интерфейсе Directus), в API — как ID пользователя или вложенный объект (зависит от запроса).

Опция date_updated добавляет поле date_updated (DateTime) и обновляется при каждом изменении записи.

Опция user_updated добавляет поле user_updated (User). Показывает последнего редактора.

Важно отметить, что все поля с префиксом date_ и user_ нельзя редактировать вручную. Отображаются в интерфейсе как read-only.

Так как в нашей коллекции мы хотим обеспечить базовый функционал управления контентом, то включаем поля: status для контроля публикации (черновик/опубликовано/архив), sort для ручной сортировки материалов, date_created/user_created для отслеживания автора и времени создания, а date_updated/user_updated — для мониторинга изменений. 

Эти поля автоматически добавляют структуру, аудит-логи и гибкость в работу с записями, не требуя ручного ввода данных. Для коллекции статей такой набор оптимален, так как покрывает основные потребности редакторов (управление видимостью, порядком) и администраторов (анализ активности).

Далее сохраняемся, и перед нами открывается вкладка со всеми полями нашей коллекции.

Поля нашей коллекции
Поля нашей коллекции

Для рассмотренного нами проекта создадим поля title, excerpt, content, image.

Нажимаем «Create field», где перед нами открывается окно с настройками и определением типов создаваемого нами поля.

Поочерёдно создаём поля:

Меню создания поля
Меню создания поля

В графе Key указываем системное имя поля (обязательное, латиница, без пробелов). Именно оно в дальнейшем используется в API, пример: /items/articles?fields=title

Default Value является значением, которое будет автоматически подставлено при создании нового элемента, если поле осталось пустым. Оставляем его пустым, так как в дальнейшем мы будем самостоятельно заполнять заголовок статьи.

На уровне интерфейса можно задать Default Value в JSON‑формате в разделе Schema, Default Value при создании или редактировании поля.

Созданное нами поле
Созданное нами поле

Теперь добавленное нами поле отображается вместе с добавленными ранее полями «по умолчанию».

Аналогично добавляем поля:

excerpt со значениями Interface: Textarea или Input, Type: text — в нём будет отображаться краткое описание статьи.

content со значениями Interface: Rich Text или WYSIWYG, Type: text — здесь будет находиться основной HTML-контент статьи Directus.

image со значениями Interface: File, Type: uuid — данное поле позволяет прикрепить иллюстрации.

После того как мы закончили с настройкой полей в коллекции Articles, создаём вторую коллекцию с названием Authors.

Для этого перейди в Settings/Data Model/Collections. Нажмите Create Collection и настройте следующим образом:

После этого переходим к добавлению пользовательских полей

Создаём поля:

name — Key: name, Interface: Input, Type: string, Required: включаем и Default Value оставляем пустым, чтобы гарантировать уникальное и обязательное имя без автоматических значений.

bio — Key: bio, Interface: Textarea, Type: text, Required выключаем, Default Value нам также не нужен. Данное поле мы будем использовать для необязательного, но удобного многострочного описания без предустановленного текста.

avatar — Key: avatar, Interface: File, Type: uuid (связь с directus_files), Required / Default: по желанию. В этом поле пользователь сможет прикреплять изображение, но не делать его обязательным, если пользователь хочет оставить его пустым.

Итоговая структура коллекции должна выглядеть следующим образом: 

После этого перейдите в раздел Content. Он позволяет работать с реальными данными, просматривать список записей коллекции (Explorer), фильтровать и сортировать их, открывать элемент и редактировать конкретные поля, включая связи и вложенные интерфейсы.

Отсюда мы переходим к нашей коллекции Authors. Здесь мы будем создавать собственные записи.

Для этого нажимаем Create Item. Там мы видим поля name — обязательно заполнить и bio, avatar — можно оставить пустыми.

После сохранения на экране должна появиться следующая запись:

Созданная нами запись будет отображаться в коллекции данным образом.
Созданная нами запись будет отображаться в коллекции данным образом.

Как мы можем увидеть, появились user_created и date_created, заполненные автоматически.

Реализация M2O-интерфейса в Directus

Для связи наших коллекций мы будем использовать интерфейс Many‑to‑One (M2O) — он используется для связи, когда много элементов одной коллекции относятся к одному элементу другой. 

В вашем проекте коллекция articles создадим поле author, которое будет являться Many‑to‑One, и будет ссылаться на коллекцию authors.

Для этого вернёмся в коллекцию Articles. Откройте Settings/Data Model/Collections/Articles.

Нажмите Create Field, выберите Many to One интерфейс.

Заполните графы: Key: author, Related Collection: выберите authors (или directus_users), Display Template: {{name}} — эта опция определяет, как элемент из связанной коллекции будет отображаться при выборе в выпадающем списке или в связке (в нашем случае в выпадающем списке будет отображаться поле “name”). Проще говоря, шаблон на основе полей коллекции, отображает понятный, читаемый текст вместо UUID.

Сохраните поле — Directus создаст колонку author с типом uuid, FK на authors.

Теперь в форме создания/редактирования статьи появится выпадающий список авторов, добавленных нами в коллекции Authors.

Таким образом, мы создали две коллекции и построили между ними M2O связь через структуру полей.

Создание и настройка ролей в Directus

Роли в Directus — это своеобразный механизм контроля доступа, который определяет, что могут видеть и делать разные пользователи в системе. Роли работают по трём принципам: разграничение по коллекциям (каждая роль может иметь разные права для разных коллекций, к примеру: может быть разрешено чтение статей, но запрещено редактирования пользователей), настройки полей (для разных ролей можно скрыть отдельные поля), фильтры данных (автоматическое ограничение видимости).

Для создания ролей перейдите в Settings/Roles & Permissions. 

Нажмите + для создания новой роли:

Назовём её Authenticated — роль для зарегистрированных пользователей. Перед нами открывается следующее окно:

Меню создания роли
Меню создания роли

Теперь вы можете заполнить описание роли и сменить иконку роли (Description, Icon — по желанию). 

Далее перейдите на вкладку Policies. Нажмите Create Policy (создать новую политику). 

Укажите Name: например, Authenticated App Access, установите галочку App Access = включено, оставьте Admin Access выключенным, если не нужны полные права.

Список прав для созданной нами роли в коллекциях
Список прав для созданной нами роли в коллекциях

Откройте в этой же вкладке окно коллекций (Add Collection) и установите необходимые права для выбранных вами коллекций, например, для коллекции articles разрешите создание своих записей и чтение всех, для authors настройте права на чтение и создание. 

Должно получиться так: 

После этого нажмите на галочку в верхней панели — настройки роли применятся. Для проверки создайте пользователя и назначьте ему роль. Попробуйте войти в интерфейс Directus под этой учётной записью: если App Access включён — вход возможен, роль применяется. Если отключён — вход будет запрещён, даже при правильных логинах и паролях.

Подключение API Directus к python-проекту

Directus предоставляет несколько Python-клиентов:

  • PyDirectus — простой синхронный REST API‑обёртка: чтение/создание/обновление коллекций и файлов.

  • directus-python-client (или directus-py-client) — обёртка на requests, с поддержкой CRUD операций, авторизацией и фильтрами.

  • py-directus — асинхронный клиент на базе HTTPX и Pydantic, удобен для asyncio‑приложений.

В статье приведём примеры с directus-python-client.

Для установки SDK в терминале пропишите 

pip install directus-python-client

После инициализации настроим аутентификацию и чтение данных. Для этого пропишите следующий код python:

from directus_api import DirectusApi

api = DirectusApi(
    username="user@example.com",
    password="password",
    endpoint="https://your-directus.amvera.io"
)

articles
= api.get_items(collection="articles", limit=5)
print(articles)

Замените все значения переменных на свои соответственно. 

При запуске программы вам вернётся массив данных из вашей коллекции.

get_items — это метод SDK (например, из directus-python-client), который отправляет GET‑запрос к REST API Directus. Метод упрощает работу с API, абстрагируя авторизацию, формат запроса и разбора ответа.

Он используется для получения списка элементов из указанной коллекции, например articles, authors, и др.

Для создания статей вы можете дополнить свою программу следующим кодом:

data = {
  "title": "Новая статья через Python",
  "excerpt": "Краткая информация",
  "content": "Подробный текст статьи"
}
created = directus.create_items("articles", [data])

Метод create_items используется для массового создания записей в заданной коллекции Directus. Он отправляет POST-запрос к REST API, в теле которого содержится список объектов данных, и получает в ответ статусы создаваемых сущностей.

Обновление и удаление статей

Для обновления статей используйте метод api.update_items.

api.update_items(collection="articles", data=[{"id": article_id, "title": "Обновленный заголовок"}])

Этот метод обновляет одну или несколько записей в указанной коллекции. Вы передаёте список объектов, каждый из которых обязательно содержит "id" — SDK отправляет PATCH-запрос к REST API. 

Для удаления статей можно использовать метод api.delete_item

api.delete_item_by_id(collection="articles", id=article_id)

Важно отметить, что Directus поддерживает soft-delete: если в вашей коллекции есть поле status с флагом soft_delete, то при удалении запись только помечается как удалённая. Подлинное удаление возможно только при отсутствии soft-delete или при роли администратора.

Если у пользователя нет прав Delete для этой коллекции — возвращается ошибка авторизации.

Итоги

В статье мы подробно рассмотрели:

  • как развернуть Directus в Amvera Cloud — легко, в пару кликов в интерфейсе, без Docker и .yaml файлов. 

  • как спроектировать коллекции Authors, Articles, определить типы полей и отношения между ними;

  • и как интегрировать Directus API через Python SDK (directus‑python‑client или pydirectus) — синхронизация контента, управление данными и автоматизация.

Наш проект — полностью настроен и готов к использованию на базе Directus. Мы настроили серверную инфраструктуру на платформе Amvera, создали структуру данных с коллекциями Authors, Articles, организовали гибкие связи между ними, настроили роль‑based access control с автоматическим присвоением автора, и реализовали интеграцию с внешним API на Python.

Теги:
Хабы:
+2
Комментарии0

Публикации

Информация

Сайт
amvera.ru
Дата регистрации
Численность
11–30 человек
Местоположение
Россия
Представитель
Кирилл Косолапов