Динамические блоки на Python

Динамические блоки показывают не текст, вбитый руками, а данные, которые считает небольшая программа. Программа берёт цифры из ваших систем — склада, CRM, бухгалтерии, внешнего сервиса — и возвращает готовый результат: таблицу, плитки с показателями, график или текст. На странице всегда свежие данные, а не вчерашняя сводка.

Какие блоки умеют считать данные

Живыми данными могут наполняться семь типов блоков: chart (график), script (готовый текст), form (форма), table (таблица), kpi (плитки с показателями), feed (лента записей) и list (список). Во всех случаях видно одно и то же: блок с данными и под ним отметку о свежести.

Что получает скрипт

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

Что возвращает скрипт

Ответ зависит от блока. Для текстового блока — готовый текст. Для таблицы, списка, ленты или плиток — набор данных. Для графика — данные и настройки. Для действия — то, что должно произойти на экране: сообщение, обновление блоков, переход или скачивание файла.

{ "toast": { "message": "Подписка оформлена", "tone": "success" },
  "refresh": true }

Окружение для скриптов создаётся само

Отдельно ставить Python (язык, на котором пишут расчётные скрипты) не нужно — он есть в образе портала. При первом запуске любого динамического блока портал сам готовит для него окружение и складывает его в томе данных. Если скрипту нужны дополнительные библиотеки, агент записывает их в файл requirements.txt и одной командой ставит — вручную ничего набирать не нужно. Подробнее — в разделе Скрипты и зависимости.

Пределы и защита от зависаний

  • На расчёт содержимого даётся до 60 секунд: если дольше, портал останавливает скрипт и показывает понятную ошибку вместо вечной загрузки.
  • На выполнение действия даётся до 120 секунд.
  • Одновременно считаются четыре скрипта — остальные ждут своей очереди. Сервер не перегружается, даже если много читателей сразу открыли страницу с динамикой.
  • Данные, которые скрипт получает на вход, ограничены 64 килобайтами — этого с запасом хватает для обычных форм и запросов.

Временное хранение результата

Не всегда разумно тревожить источник данных при каждом просмотре. Для этого у блока можно задать срок хранения результата — от нуля до 86 400 секунд (целых суток). Например, при сроке 300 секунд данные будут пересчитываться не чаще, чем раз в пять минут, а между этим показываться уже готовый результат. Если скрипт поправили, портал заметит изменение файла и посчитает заново, не дожидаясь срока.

Свежесть данных под блоком

Под каждым динамическим блоком видно, когда данные обновились — например, Обновлено в 14:02, — и есть кнопка со значком обновления. Нажатие пересчитывает блок тут же, не перезагружая страницу. Данные обновляются и сами: когда пришла правка страницы от агента, когда сменилось значение переменной и когда сработало действие с ответом «обновить».

Ошибки понятны и не ломают страницу

Если что-то пошло не так, читатель видит понятное сообщение, а не пустой блок:

  • скрипт не найден — файл, на который ссылается блок, отсутствует;
  • не тот формат ответа — скрипт вернул данные, которые блок не умеет показать;
  • истекло время — расчёт не уложился в отведённые секунды;
  • Python недоступен — не удалось подготовить окружение; в сообщении сказано, что проверить.

У действий ошибка мягче: скрипт сам формулирует текст вроде «укажите корректную почту», и читатель видит именно его. Подробные технические записи показываются только агенту — читателям они ни к чему.

Про безопасность

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

Дальше: где лежат скрипты и как ставить библиотеки — в разделе Скрипты и зависимости; как рисуются графики — в разделе Графики; как устроены формы — в разделе Формы.

← Оглавление документации