Особистий інструметарій
Ви знаходитеся тут: Головна Документація Що таке Zope?

Що таке Zope?

Переваги використання платформи Zope

ZopeZope (Z Object Publishing Environment) - це об'єктно-орієнтована платформа, сервер застосувань, призначений для створення динамічних web-приложений і інтерактивних сайтів.

У вираженні "об'єктно-орієнтований" тут декілька сторін. По-перше, Zope написаний на мові Python, об'єктно-орієнтованій мові з множинним спадкоємством. По-друге, Zope побудований довкола ідеї "публікації об'єктів" - URL, до якого звертається браузер, є посиланням на об'єкт (екземпляр класу), що викликається на виконання. По-третє, самі об'єкти (серіалізовані екземпляри класів) зберігаються в об'єктно-орієнтованій базі даних ZODB. "Об'єктно-орієнтований" тому що це невід'ємна властивість Zope.

Ще одна невід'ємна властивість - модульність. Zope - це не цілісний шматок коду, а багатий набір модулів, званих компонентами.

Протоколи WWW (HTTP, CGI і так далі) часто неадекватні завданням і можуть робити публікацію динамічних даних невиправдано складною. Їх низький рівень недостатній для безпосереднього створення багатьох класів web- застосувань на їх основі.

Zope створює об'єктно-орієнтовану оболонку довкола цих низькорівневих засобів. З його допомогою рішення задачі відбувається звичайною дорогою - програміст пише набір ієрархій класів, що є абстракцією наочної області, а Zope бере на себе обов'язок за поданням доступу до екземплярів цих класів.

Із Zope працюють наступні категорії користувачів

  • адміністратор хоста - компілює і інсталює програми і додаткові компоненти
  • програміст - пише компоненти, тобто класи, на мові Python
  • web-майстер - розставляє ці компоненти (тобто екземпляри класів) на сайті, користуючись менеджерським web-інтерфейсом
  • адміністратор сайту - заводить записи про користувачів, створює ролі, ставить їх у відповідності один одному, призначає кому (якій ролі) до яких об'єктів можна мати доступ, і який саме доступ (створення об'єкту, редагування, видалення, перегляд і так далі)

Це, звичайно, не обов'язково різні люди - це ролі. На маленькому сайті ці ролі може виконувати одна людина. Для великих сайтів Zope надає механізми делегування повноважень адміністраторам ділянок сайтів, верстальникам, редакторам.

Компоненти Zope

  1. Zope Core. У "серці" Zope знаходиться ORB (object request broker), а також механізми, що забезпечують пошук (ZCatalog), безпеку, колективну роботу і розділення інформації. Zope має web-інтерфейс для програмування і адміністрування.
  2. ZServer. Багатопотоковий ZServer надає гнучкий механізм зв'язку, підтримуючи протоколи HTTP, FTP, XML-RPC, FASTCGI і PERSISTENTCGI. Zope може бути запущений з ZServer, причому можна використовувати ZServer спільно з вже існуючим сервером WWW; або ж Zope можна запустити з-під існуючого сервера WWW в режимі PCGI (однопоточний сервер PERSISTENTCGI).
  3. Object Database (ZODB). Об'єктно-орієнтована база Zope зберігає об'єкти (саме об'єкти в сенсі Python, тобто серіалізовані екземпляри класів); сама ZODB написана об'єктно-орієнтовано, тобто як набір дерев класів. У ZODB можна довільно міняти клас StorageManager - сховище. Стандартне сховище FileStorage зберігає дані у файлі Data.fs, але можна використовувати альтернативні класи - SQLStorage або BerkeleyStorage. ZODB підтримує атомарні операції (транзакції), необмежений undo (лише з відповідним сховищем, наприклад, FileStorage або InterbaseStorage підтримують версії і відкат, а останні сховища - ні), приватні версії, і масштабується до гігабайтів даних, що зберігаються. Окремий механізм ZEO (Zope Enterprise Option) дозволяє підвищити надійність і масштабованість шляхом кластеризації. Власне, ядром ZEO є ще одне сховище ServerStorage, яке звертається не до локального Data.fs, а до віддаленого сервера; другим компонентом ZEO є якраз сервер.
  4. Document Template Markup Language (DTML). За цією назвою ховається багатий механізм інтерпретації (рендеринга) шаблонів. Прості сайти можна створювати, взагалі не звертаючись до Пітона - на одному DTML (природно, користуючись, вже готовими компонентами Zope).
  5. Інтеграція з реляційними СУБД. Zope має рівень абстракції ZSQL, що дозволяє легко інтегрувати систему з SQL, будь то POSTGRESQL, Oracle, MYSQL або ODBC.
  6. Продукти Zope. Продукти - компоненти, написані програмістом на Пітоні, - дозволяють доповнювати Zope новими типами об'єктів. Наприклад, компонент (назвемо його умовно Poll) для створенні на сайті голосувань. Після того, як програміст напише відповідні класи, web-майстер розставить екземпляри цих класів на сайті і створить кожному з екземплярів дизайн; редактор сайту наповнить їх вмістом (питання і список відповідей для кожного екземпляра); і відвідувачі сайту можуть починати голосувати.
  7. ZClasses. Z-класи - це механізм програмування "мишкою", програмування без програмування. Z-класи не вимагають знання програмування, і в той же час дозволяють створювати нові типи даних (компоненти) через web. Створені програмістом Z-класи легко поширюються і встановлюються.

Що Zope дає для...?

Програміста:

  • механізм шаблонів (DTML)
  • набір компонентів (ZODB, ZCatalog та інші)
  • API для створення своїх компонентів
  • API для доступу до Zope минувши www-інтерфейс, прямо по HTTP і XML-RPC
  • деякі базові компонентів (Zserver, ZPublisher, ZODB, DTML, Catalog) можна використовувати взагалі зовні Zope, просто в програмах на Пітоні

web-майстра:

  • механізм шаблонів (DTML)
  • www-інтерфейс для управління сайтом

адміністратора:

  • www-інтерфейс для управління сайтом
  • простий, і в той же час потужний інструментарій для адміністрування користувачів, прав і інших механізмів безпеки

Програмування для цієї складної і гнучкої платформи здійснюється різними механізмами і на різних мовах.

  1. Програмування на DTML. Це не стільки програмування, скільки верстка, робота web-майстра. З DTML доступне велике число функцій і об'єктів Пітона і Зоупа, за винятком тих, які приховані з міркувань безпеки. DTML призначений переважно для презентації, а не для маніпуляції даними.
  2. PythonMethods. Код пишеться на Пітоні і вводиться через web-інтерфейс Zope. На цей код поширюються ті ж обмеження безпеки, що і на DTML. Зазвичай PythonMethod - одна або декілька простих функцій.
  3. ExternalMethods. Це теж код на Пітоні, і теж звичайні декілька зв'язаних функцій. На цей код не поширюються обмеження безпеки (в тому сенсі, що цей код має доступ до всіх функцій, типів і класів Пітона і Zope, але сам цей код можна захистити від додавання або використання засобами безпеки Zope), і ставиться він у файлову частину Zope руками адміністратора хоста, а потім додається в ієрархію об'єктів Zope через web-інтерфейс.
  4. Компоненти. Вони пишуться на Пітоні за допомогою Product API. Компонент - це клас або набір дерев класів. Жодних обмежень по безпеці (у вже вказаному для ExternalMethods сенсі; використання ж методів компонента може бути захищене спільними зусиллями програміста і адміністратора сайту). Код цей ставиться у файлову систему адміністратором хоста, і Zope доводиться перезапускати. Після цього в списку Продуктів з'являється новий Продукт (а то і не один, якщо програміст або адміністратор хоста разом ініціалізував декілька Продуктів або в одному Продукті реєструє декілька Виробників (конструкторів)), екземпляри якого можна створювати в будь-якому місці ієрархії об'єктів.
  5. ZClass. "Програмування мишкою". Творець Z-класу розписує, які в об'єкту є атрибути, і створює на DTML способи редагування і показу екземплярів класу. Все "програмування" йде через web-інтерфейс Zope. Z-клас додається в список Продуктів, і можна створювати його екземпляри. При зміні програмістом Z-класу всі екземпляри міняються автоматично (тобто екземпляри містять не копію коди, а посилання на клас). Z-класи можна успадковувати від багатого базового набору класів Zope, можна від інших Z-класів, і програміст може створити Компонент, що включає класи, від яких можуть успадковуватися Z-класи