Семейство вэб-фреймворков, основанных на ZTK

Исторически так сложилось, что термин zope имеет много значений, и сталкиваясь с ним, нужно быть готовым к этому. Чаще всего лучше уточнять контекст. В этой статье делается попытка конкретизировать, что подразумевается в различных ситуациях.

Тулкит, коллекция пакетов

ZTK (Zope Toolkit) - большой набор пакетов, предназначенный для построения приложений и фреймворков. Поскольку набор велик, и разные его части развиваются относительно независимо друг от друга, требуется знать, какие версии пакетов корректно работают друг с другом. С этой целью ZTK определен в виде одного файла - т.н. KGS (Known Good Sets), а конкретно - ztk.cfg описывающего версии пакетов пространства имен zope.*, корректно работающие друг с другом. Кроме него, есть другие KGS - например отдельный KGS для пакетов из пространств имен zope.app.*.

Система сборки проектов и разрешения зависимостей zc.buildout умеет читать KGS-файлы, обеспечивая создание рабочей среды-песочницы с корректными номерами версий пакетов.

ZTK-приложения

При разработке кастомного приложения программист выбирает пакеты, содержащие нужные ему компоненты, и пишет свои, а "клеем" служит система регистрации компонент, основанная на однотипных декларативных конструкциях zcml. Здесь отметим 2 важных момента:

а) регистрируются только те компоненты, которые разработчик посчитал необходимым использовать для своего приложения,

б) ставятся в зависимость только те пакеты из состава ZTK, которые содержат эти необходимые компоненты.

Далеко не все те python-модули, что находятся в пакетах-зависимостях у вашего приложения (т.е. составляют вашу сборку zope), импортируются в runtime. Только те, которые "включены" zcml-файлом. На сегодняшний день это имеет значение, т.к., собирая приложение на ZTK, вы будете иметь много кода в библиотеках ZTK, который, скорее всего, будет попросту лежать на диске не задействованным. Таково состояние дел на сегодняшний день, и это излишки аккуратной миграции из Zope3 Application Server в ZTK.

Таким образом, в случае с написанием кастомного приложения на ZTK, можно говорить о полностью собственной сборке Zope.

Для того, чтобы не тратить усилия на поддержку собственного индекса версий пакетов-зависимостей, рекомендуется использовать ztk.cfg и zopeapp.cfg, указанные выше.

ZTK-фреймворки

Однако собственная сборка ztk-приложения - дело не столь тривиальное, и требует серьезного опыта работы с множеством пакетов. Для работы над большинством заказных сайтов, а также для быстрого старта и получения чего-то работающего сразу, нужно нечто больше, нежели огромный набор разрозненных пакетов.

Поэтому существуют фреймворки, такие как bluebream, Grok, Zope2, Plone Framework, z3ext. Каждый из них предполагает некоторое количество методологических решений и подходов к использованию ZTK и инфраструктуру для создания и обеспечения проектов. В целом, фреймворки систематизируют и облегчают работу с ZTK с помощью некоторого собственного набора идей.

Сервер приложений

Собственно сервер приложений Zope2, который на данный момент основан на ZTK. Самый старый продукт, ему более 10-лет. Все эти годы и по сей день он активно развивался и улудшался. Постепенно был "переписан" на ZTK.

Пул технологий

Весь пул технологий и вышеназванных фреймворков также часто называют одним словом "zope", создавая тем самым неимоверную путаницу.

Особняком стоит фреймворк repoze.bfg, основаный на некотором ограниченном наборе пакетов из ZTK. Этот ограниченный набор называют ZCA (Zope Component Architecture), хотя на практике, в разработке на repoze.bfg, как правило, активно используются и другие пакеты из ZTK.