---
title: "Динамические блоки на Python"
id: "1982"
type: "page"
slug: "python"
published_at: "2026-09-20T15:43:05+00:00"
modified_at: "2026-09-21T00:00:47+00:00"
url: "https://pastukhov.com/agents/portal/docs/python"
markdown_url: "https://pastukhov.com/agents/portal/docs/python.md"
excerpt: "Динамические блоки показывают не текст, вбитый руками, а данные, которые считает небольшая программа. Программа берёт…"
---

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

[https://pastukhov.com/agents/portal/docs/python.md](https://pastukhov.com/agents/portal/docs/python.md)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Дальше: где лежат скрипты и как ставить библиотеки — в разделе [Скрипты и зависимости](/agents/portal/docs/scripts)
; как рисуются графики — в разделе [Графики](/agents/portal/docs/charts)
; как устроены формы — в разделе [Формы](/agents/portal/docs/forms)
.

[← Оглавление документации](/agents/portal/docs)
