Как создать простое CRUD-приложение в Appsmith
Создание внутренних инструментов с нуля отнимает время, которого у вас нет. Вам нужна быстрая административная панель или интерфейс управления данными, а не трёхмесячный проект разработки. Appsmith позволяет подключить источник данных, перетащить виджеты и настроить операции создания, чтения, обновления и удаления (Create, Read, Update, Delete) менее чем за час.
Это руководство описывает стандартный рабочий процесс CRUD-приложения в Appsmith: подключение базы данных, отображение данных в виджете Table, обработку создания и обновления записей через формы и обновление данных после изменений.
Ключевые выводы
- Подключайте SQL-базы данных или REST API к Appsmith, используя зашифрованные учётные данные источников данных для конкретных сред
- Привязывайте результаты запросов к виджетам Table, используя синтаксис
{{queryName.data}} - Используйте модальные окна с виджетами Input для обработки создания и обновления записей
- Различайте
triggeredRow(контекст нажатия кнопки) иselectedRow(выделенная строка) для точных операций с данными - Обновляйте данные таблицы после каждого изменения, вызывая
queryName.run()при успешном выполнении
Подключение источника данных
Начните с создания нового приложения в Appsmith. На левой боковой панели нажмите + рядом с Datasources и выберите тип вашей базы данных — PostgreSQL, MySQL или REST API.
Для SQL-баз данных введите учётные данные для подключения: хост, порт, имя базы данных, имя пользователя и пароль. Храните конфиденциальные значения в зашифрованной конфигурации источников данных Appsmith и настройках окружения, а не жёстко кодируйте их в запросах или виджетах. Запросы выполняются на стороне сервера, поэтому учётные данные никогда не попадают в браузер.
Полный список поддерживаемых баз данных и параметров конфигурации можно найти в официальной документации по источникам данных.
Протестируйте соединение перед сохранением. Если оно не удалось, проверьте правила брандмауэра, требования SSL и точность учётных данных.
Чтение данных с помощью запроса
Создайте первый запрос для получения записей. Нажмите + рядом с Queries/JS, выберите источник данных и напишите оператор SELECT:
SELECT id, name, email, created_at FROM users ORDER BY created_at DESC LIMIT 100;
Назовите этот запрос getUsers и запустите его, чтобы проверить ответ.
Для больших наборов данных реализуйте пагинацию на стороне сервера. Виджет Table в Appsmith поддерживает это нативно — вы будете передавать параметры смещения и лимита в запрос на основе состояния пагинации таблицы.
Отображение данных в виджете Table
Перетащите виджет Table на холст. В свойствах виджета установите свойство Table data на:
{{getUsers.data}}
Таблица автоматически генерирует столбцы из ответа вашего запроса. Переименуйте столбцы, настройте ширину и скройте поля, такие как внутренние идентификаторы, по мере необходимости.
Этот паттерн интеграции базы данных Appsmith — привязка запроса к виджету — формирует основу каждого low-code CRUD-интерфейса, который вы будете создавать. Полные параметры конфигурации виджета Table описаны в документации виджета Table.
Создание записей с помощью формы или модального окна
Добавьте виджет Button с надписью «Добавить новую запись» и установите его действие onClick на открытие модального окна. Внутри модального окна добавьте виджеты Input для каждого поля: nameInput, emailInput.
Создайте INSERT-запрос с именем createUser:
INSERT INTO users (name, email) VALUES ({{nameInput.text}}, {{emailInput.text}});
Привяжите кнопку отправки модального окна к запуску createUser. При успешном выполнении запустите getUsers.run() для обновления таблицы, затем закройте модальное окно.
Для валидации используйте встроенные свойства валидации виджета Input или напишите JSObject, который проверяет значения полей перед отправкой.
Discover how at OpenReplay.com.
Обновление записей с использованием выбранных строк
Включите выбор строк в виджете Table. Когда пользователь нажимает на строку, Table1.selectedRow предоставляет данные этой записи.
Создайте UPDATE-запрос с именем updateUser:
UPDATE users
SET name = {{nameInput.text}}, email = {{emailInput.text}}
WHERE id = {{Table1.selectedRow.id}};
Вы можете повторно использовать то же модальное окно для редактирования, предварительно заполнив поля ввода значениями Table1.selectedRow.name в качестве значений по умолчанию. Переключайтесь между режимами «создание» и «редактирование», используя переменную JSObject.
После успешного выполнения обновления вызовите getUsers.run() для обновления отображения.
Удаление записей с подтверждением
Добавьте столбец Button в вашу таблицу для действий удаления. Установите тип столбца на Button и настройте onClick для выполнения DELETE-запроса:
DELETE FROM users WHERE id = {{Table1.triggeredRow.id}};
Обратите внимание на разницу: triggeredRow захватывает строку, в которой была нажата кнопка, в то время как selectedRow захватывает выделенную строку.
Включите Request confirmation before running в настройках запроса, чтобы предотвратить случайное удаление. При успешном выполнении обновите данные таблицы.
Рабочий процесс Table-Form в Appsmith
Паттерн, который вы создали — виджет Table, отображающий результаты запроса, форма или модальное окно для обработки ввода, параметризованные запросы для изменений и обновление данных при успехе — масштабируется на любой вариант использования CRUD. Этот рабочий процесс table-form в Appsmith применим независимо от того, управляете ли вы пользователями, инвентарём, заявками в поддержку или любыми другими записями.
Для production-приложений рассмотрите:
- Управление доступом на основе ролей: Appsmith поддерживает детальные разрешения на уровне приложения, страницы и источника данных
- Окружения и учётные данные: Безопасно храните пароли баз данных и API-ключи в средах разработки, тестирования и production
- Пакеты: Делитесь переиспользуемыми запросами и JSObjects между несколькими приложениями, используя Appsmith Packages
- Пагинация на стороне сервера: Необходима для таблиц с тысячами записей
Заключение
Теперь у вас есть функциональный CRUD-интерфейс: данные отображаются в таблице, формы для создания и редактирования записей, функциональность удаления с подтверждением и автоматическое обновление данных после каждого изменения.
Отсюда расширьте приложение фильтрами поиска, дополнительными страницами или подключитесь к Appsmith Workflows для автоматизации backend-процессов. Low-code CRUD-интерфейс, который вы создали, служит основой для более сложных внутренних инструментов — без написания UI и слоя данных с нуля.
Часто задаваемые вопросы
selectedRow относится к строке, которую пользователь выделил, нажав на неё, в то время как triggeredRow относится к конкретной строке, в которой была нажата кнопка или выполнено действие. Используйте triggeredRow для столбцов с кнопками в таблицах, чтобы гарантировать, что действие нацелено на правильную запись, и selectedRow, когда вы хотите сослаться на текущую выделенную строку для редактирования или отображения.
Appsmith поддерживает параметризованные запросы для многих SQL-источников данных, когда вы используете mustache-привязки типа {{inputWidget.text}}, но точное поведение зависит от драйвера базы данных. Избегайте ручной конкатенации строк в SQL, валидируйте ввод, используя свойства валидации виджетов, и применяйте ограничения на стороне сервера, где это возможно.
Да. Создайте переменную JSObject для отслеживания текущего режима, например formMode, установленную либо на create, либо на edit. При открытии модального окна для новой записи установите formMode на create и очистите поля ввода. При редактировании установите formMode на edit и заполните поля ввода значениями Table1.selectedRow. Ваша кнопка отправки может затем условно запускать либо createUser, либо updateUser в зависимости от режима.
Включите пагинацию на стороне сервера в свойствах виджета Table. Затем измените свой запрос, чтобы он принимал значения пагинации от виджета таблицы (размер страницы и смещение) и применял их в вашем SQL, используя LIMIT и OFFSET. Таблица автоматически обрабатывает навигацию по страницам и запускает повторное выполнение запросов, когда пользователи меняют страницы.
Gain Debugging Superpowers
Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers. Check our GitHub repo and join the thousands of developers in our community.