Personal tools
You are here: Home Статьи Типичные элементы управления в скинах Zope3
Document Actions

Типичные элементы управления в скинах Zope3

by Егор Шершнев last modified 2007-10-16 15:01

Статья, написанная нашим сотрудником, призвана стать путеводителем для новичков по ВЕБ-элементам управления сервером приложений Zope. На самом деле, будет отличной идеей, если распечатка этого текста будет лежать на вашем столе первый месяц работы с Zope3.

Типичные элементы управления в скинах Zope3:

Введение:

Наверное, для любого разработчика и админиcтратора, который в силу своих профессиональных потребностей использовал Zope2.x, естественным является то, что Zope2.x обладает встроенным интерфейсом управления, называемом также ZMI (Zope Management Interface). ZMI - замечательное место, нахождение в котором позволяло сделать с установленым зопом всё, что угодно и залезть практически в любые его глубины, расковыряв их, если надо, перестроив, получив в них доступ к различным утилитам и внутренностям установленных продуктов.

И вот как гром среди ясного неба появляется Zope3. Душа разработчика на Zope2.x просит поскорее залезть в ZMI, посмотреть что там как и как это работает. Залезаем, что-то делаем, время идёт, мы уверены, что находимся в интерфейсе управления, но спустя какое-то время с ужасом узнаём, что у Zope3 вовсе нет никакого ZMI, а то, что мы принимали за ZMI после того, как авторизовывались на установленном Zope3 под пользователем admin, вовсе не ZMI, а просто скин...

В рамках данной статьи попробуем понять, что же такое скин, что его отличает от ZMI, какие основные элементы управления (интересные места) присутствуют в скинах Zope3 и для чего каждое из них предназначено.

Что такое скин:

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

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

В действительности, как легко понять, ZMI в Zope2 - это тоже был скин, но ZMI был жёстко вшит в объекты, которые его использовали, поэтому в Zope2.x, даже при желании, мы не могли сделать так, чтобы всем привычный ZMI выглядел как-то по иному, не прибегая к каким-либо программистским уловкам.

Чтобы стало немного понятнее о чём идёт речь, для доступа к имеющемуся у вас Zope'у 3.x, перейдите в браузере по следующему адресу (если Zope установлен не на локально машине, то адрес и порт могут отличаться от предложенных):

            http://localhost80/@@contents.html

Авторизуйтесь, если потребуется, и вы увидите нечто, отображённое в одном из имеющихся у вас скинов, используемых по умолчанию. Вероятнее всего, это скин с именем Rotterdam. Для того, чтобы проверить так это или нет, перейдите в браузере по следующему адресу:

            http://localhost80/++skin++Rotterdam/@@contents.html

Ничего не изменилось? Значит у вас по умолчанию установлено использование скина Rotterdam. Изменилось? Значит по умолчанию установлено что-то другое. В любом случае, теперь перейдите в браузере по следующему адресу:

            http://localhost80/++skin++Basic/@@contents.html

Вы увидите, что бОльшая часть элементов, которые были видны на странице в предыдущем случае, на ней и остались, но выглядят несколько иначе. Вот в этом и есть смысл использования скинов и одно из главных нововведений, появившихся в Zope3.x в отличие от Zope2.x: возможность изменять внешний вид системы не прибегая для этого к её глубокому перепрограммированию.

Как видно, использование того или иного скина никак не отражается на функциональности Zope, однако, как можно увидеть, некоторые элементы, присутствующие, например, в скине Rotterdam, отсутствуют в скине Basic и наоборот.

Теперь, когда понятие скина немного прояснилась, рассмотрим основные элементы управления, присущие административным скинам и то, для чего каждый из них нужен.

Основные элементы управления в скинах Zope3:

Независимо от используемого скина, в Zope3 есть целый набор интересных и крайне полезных мест, без знания назначения и местонахождения которых управлять и настраивать установленный у вас Zope невозможно.

Основных скинов в Zope3 - два: Basic и Rotterdam. Basic скин лучше отлажен и, в общем случае, стабильнее работает. В реальной жизни возникают ситуации, когда Basic скин буквально спасает от залезания в отладчик при решении какой-то проблемы. Тем не менее, скин Rotterdam лучше оформлен, и, вообще говоря, более удобен для использования, хотя и ценой меньшей стабильности.

Итак, зайдите в Zope, авторизуйтесь под администратором, перейдите, для определённости, к корневой папке Zope, если вы ещё не в ней, в меню Navigation ("навигация") слева выберите top ("основная"). Адрес в вашем браузере в результате проделанных действий должен быть примерно следующий:

            http://localhost80/@@contents.html

Теперь рассмотрим основные задачи, которые могут возникнуть при работе в скинах Zope3 и то, с помощью каких элементов меню их выполнить. Каждое следующее действие будет описано исходя из того, что на момент начала его выполнения вы находитесь в корневой папке Zope по адресу, приведённому выше.

Поскольку каждый из скинов обладает какими-то специфическими для него элементами, а цель настоящей статьи - описание элементов управления, свойственных любому скину, для перехода к тем или иным элементам управления будем указывать адрес, который необходимо написать в браузере для того, чтобы к этим элементам перейти. Отметим, что в скинах, подобных, например, Rotterdam'у, переход к необходимым элементам может осуществляться с помощью специально предназначенных для этого меню, а в скине Basic переход к требуемым элементам, в большинстве случаев, как раз и должен осуществляться набором необходимого адреса в браузере.

Итак, рассмотрим основные действия, которые можно выполнить с помощью любого из скинов и то, каким образом эти действия можно выполнить.

Добавление объекта:

Добавление объектов - это то, без чего работа в среде Zope невозможна. Для добавления объекта в текущий контейнер, необходимо активизировать вид "+" так, чтобы URL в браузере был, в зависимости от предпочитаемого скина, одним из следующих:

                http://localhost80/++skin++Rotterdam/@@+

                http://localhost80/++skin++Basic/@@+

Тогда откроется вид, содержащий список продуктов, которые вы можете добавить в текущий контейнер. Этот список может сильно изменятся от контейнера к контейнеру, что вполне естественно: на возможность вхождения объектов в контейнер существуют ограничия.

Выберете нужный объект из списка, установив флажок напротив него, введите внизу, рядом с кнопкой Add желаемое название для объекта и нажмите на кнопку.

В зависимости от типа объекта, он либо будет сразу добавлен, либо откроется форма, позволяющая ввести ряд параметров, необходимых для создания объекта. Форма добавления аналогична форме редактирования, которая будет подробно описанной ниже. Здесь отметим только что поля формы проверяются на корректность, некорректно-заполненные поля при попытке сохранения подсвечиваются, а сохранение выполняется нажатием на кнопку "Add".

Редактирование объекта:

Объект может обладать свойствами. Эти свойства можно подробно изучить через вид introspector.html, что будет подробно описано ниже, но, как правило, для интерфейса объекта регистрируют специальную форму, построенную в соответствии с его схемой и позволяющую редактировать объект. Существует традиция (которая является соглашением и не более того) давать этой форме название "@@edit.html".

Для того, чтобы увидеть как происходит редактирование объекта, добавьте объект File ("Файл") с именем, например, somename.txt в корневую папку Zope, после чего форма редактирования для данного файла будет доступна по любому из следующих адресов:

                http://localhost80/++skin++Rotterdam/somename.txt/@@edit.html

                http://localhost80/++skin++Basic/somename.txt/@@edit.html

Форма, которую вы видите на экране, может меняться в зависимости от того, для какого объекта она вызвана. В данном случае она вызвана для объекта с интерфейсом IFile и содержит, соответственно, поля Content Type (тип содержимого файла) и Data (содержимое файла), описанные в схеме данного интерфейсе.

В общем случае, форма редактирования позволяет изменить значения любых атрибутов редактируемого объекта, которые могут быть изменены. На форме располагаются поля для ввода соответствующих значений, соответствующего вида и размера. После изменения значений в полях на нужные, для подтверждения изменений следует нажать кнопку Change ("Изменить") и посмотреть что произойдёт. Если ошибок при редактировании не возникло, выйдет сообщение об удачности сохранения изменений. Если при редактировании были введены недопустимые данные, то неправильно запоненные поля буду отмечены красным цветом и сохранения не произойдёт до тех пор, пока все ошибки не будут исправлены.

Обратите внимаение, что вызов вида edit.html может спровоцировать ошибку, если такой вид не предусмотрен для данного объекта.

Просмотр объекта:

Получить представление о том, как объект, в котором вы находитесь, будет выглядеть, если к нему обратиться из браузера, можно, дописав в адресе вызов вида preview.html так, чтобы адрес в браузере стал примерно одним из следующих:

                http://localhost80/++skin++Rotterdam/@@preview.html

                http://localhost80/++skin++Basic/@@preview.html

Если для того объекта, в которм вы находитесь, не определено то, как он должен выглядеть, в поле просмотра объект будет выведен в том виде, в каком вы видите его в текущем выбранном скине.

Просмотр и редактирование контейнера:

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

При входе в контейнер по умолчанию отображается вид просмотра контейнера:

                http://localhost80/++skin++Rotterdam/

                http://localhost80/++skin++Basic/

Который подобен таблице со следующими колонками: название, заголовок, дата создания и последней модификации объекта. В каждой строке таблицы отображается отдельный объект. Нажав на название этого объекта, можно в него войти. Таким образом, основная функция этого вида - навигация по объектам.

Понажимав немного на ссылки :), или введя один из следующих URL:

                http://localhost80/++skin++Rotterdam/@@contents.html

                http://localhost80/++skin++Basic/@@contents.html

можно активизировать вид contents.html. Отличия заметны сразу: поле флага напротив каждой строки содержимого и кнопки редактирования содержимого (Rename, Delete и другие) под таблицей. Основная функция этого вида очевидна: редактирование контейнера. Вы можете установить один или более флажков в строках содержимого (выбрав их таким образом) и нажать на кнопку, которая выполнит указанное на ней действие с выбранным содержимым контейнера.

Регистрация утилиты:

Любой из объектов Zope можно зарегистрировать как компоненту, чтобы впоследствии обращаться к этой компоненте как к именованной утилите по известному имени и/или предоставляемому интерфейсу. Регистрация компонент является обычным способом настройки продуктов Zope3. Для того, чтобы зарегистрировать объект, нужно вызвать его вид addRegistaration.html так, чтобы URL выглядел примерно следующим образом:

                http://localhost80/++skin++Rotterdam/@@addRegistration.html

                http://localhost80/++skin++Basic/@@addRegistration.html

и заполнить поля предлагаемой формы.

Список регистрантов:

Zope устроен так, что при желании, в каждой из его папок (это контейнер специального вида) можно создать свою папку управления сайтом (сайт-менеджер). При создании сайта в некотором контейнере, есть возможность увидеть все зарегистрированные внутри этого сайта утилиты. Чтобы это сделать, необходимо активизировать вид registrations.html применительно к интересующему вас менеджеру сайтов (перейти в сайт-менеджер можно дописав к адресу ++etc++site) одним из следующих способов:

                http://localhost80/++skin++Rotterdam/++etc++site/@@registrations.html

                http://localhost80/++skin++Basic/++etc++site/@@registrations.html

Ещё есть вид registration.html, который можно активировать не для сайт-менеджера, а для любого объекта. Это позволит увидеть список имён и интерфейсов, под которыми зарегистрирован данный объект, либо сообщение о том, что данный объект ещё не регистрировался (This object isn't yet registered). Для этого URL должен быть примерно одним из следующих:

                http://localhost80/++skin++Rotterdam/@@registration.html

                http://localhost80/++skin++Basic/@@registration.html

Добавление сайт-менеджера или управление сайтом:

Cайт менеджер в контейнере может быть в одном из трех состояний:

  • уже создан;
  • еще не создан;
  • не может быть создан никогда.

Варианты "может быть никогда не создан" обсуждаются в учебнике по клинической психиатрии и марксистко-ленинской философии. Третий случай не интересен, а первые два, которые характерны для папки (папка - это такой очень известный контейнер), обсуждаются ниже.

Если для данного контейнера сайт не создан, то его можно создать, вызвав вид addSiteManager.html. Например, для папки test, созданной в корневой папке, вызов данного вида будет, в зависимости от скина, одним из следующих:

                http://localhost80/++skin++Rotterdam/test/@@addSiteManager.html

                http://localhost80/++skin++Basic/test/@@addSiteManager.html

После активизации указанного вида, сайт-менеджер будет создан и вы сразу же воткнётесь в просмотр его содержимого, то есть URL в браузере будет примерно следующим:

                http://localhost80/++skin++Rotterdam/test/++etc++site/@@contents.html

                http://localhost80/++skin++Basic/test/++etc++site/@@contents.html

Вызвав впоследствии указанные URL'ы, вы всегда сможете попасть в имеющийся сайт-менеджер.

Права:

Вызов вида grant.html позволяет установить роли и права доступа для пользователей системы. Для перехода к назначению прав доступа и ролей пользователям системы необходимо, чтобы URL в браузере был примерно следующим:

                http://localhost80/++skin++Rotterdam/@@grant.html

                http://localhost80/++skin++Basic/@@grant.html

Борьба пользователей за свои права - тема отдельной статьи, поэтому в рамках описания типичных мест в скинах Zope3 не будем останавливаться на этой теме подробно, отметив лишь то, что в Zope правами пользователей можно установить любой режим безопасности: демократию, тиранию и т.п.

Журнал ошибок:

Вызвав вид errorRedirect.html можно перейти к просмотру журнала ошибок, произошедших в системе во время её работы. Журнал позволяет узнать когда произошла ошибка, имя пользователя, который ее спровоцировал, а также увидеть, краткое сообщение об ошибке и попробовать догадатся о его смысле.

Для активизации вида, URL в браузере должен быть одним из следующих:

                http://localhost80/++skin++Rotterdam/@@errorRedirect.html

                http://localhost80/++skin++Basic/@@errorRedirect.html

Сообщение об ошибке является ссылкой, перейдя по которой можно увидеть исчерпывающую информацию о произошедшей ошибке, включающую тип ошибки, параметр ошибки, список вызовов, которые привели к ошибке, содержимое объекта REQUEST и др.

Помощь:

Для перехода к просмотру справки необходимо к адресу дописать ++apidoc++, например так:

                http://localhost:8180/++apidoc++

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

Помните: помощь доступна только в отладочном режиме.

Откат:

ZODB - транзакционная база, с полной подддержкой Undo (отката). Управление этой возможностью становится доступно с помощью вызова видов undo, undoMore и undoAll, отвечающих, соответственно, за отмену последней транзакции, возможность отмены любых транзакций текущего пользователя и возможность отмены любых транзакций, совершённых любым пользователем системы. Активизировать указанные виды можно с помощью перехода по одному из следующих URL'ов:

                http://localhost80/++skin++Rotterdam/@@undo.html

                http://localhost80/++skin++Rotterdam/@@undoMore.html

                http://localhost80/++skin++Rotterdam/@@undoAll.html

                http://localhost80/++skin++Basic/@@undo.html

                http://localhost80/++skin++Basic/@@undoMore.html

                http://localhost80/++skin++Basic/@@undoAll.html

При работе с откатами учтите, что они работают так, что производят впечатление плохо отлаженного интерфейса к хорошо написанному функционалу (скорее всего, исторически так оно и есть). Учтите также то, что вызов вида undo просто отменяет последнюю транзакцию (последнее выполненное действие), не задавая никаких вопросов. Чтобы вернуть на место то, что вы только что изменили, следует повторно прибегнуть к виду undo, что отменит то изменение, которое вы только что отменили.

Интроспекция:

Использование вида introspector.html является незаменимым при разработке и желании подробнее узнать о том объекте, на котором сосредоточено ваше внимание и внутри которого вы находитесь.

Интроспектор позволяет увидеть список интерфейсов, предоставляемых только данным объектом, список всех предоставляемых интерфейсов, базовые классы текущего объекта, набор его атрибутов и методов, список аннотаций объекта и, если данный элемент - контейнер, то список объектов, содержащихся в данном контейнере.

Замечательным свойством интроспектора является то, что он позволяет не только получить информацию о свойствах, методах, интерфейсах и других характеристиках данного объекта, но и перейти к просмотру подробной информации о любом из интерфейсов и классов, упоминающихся на данной странице, простым щелчком мыши на имени класса или интерфейса, информация о котором вызывает интерес.

Перейти к просмотру информации интроспектора можно по одному из следующих URL:

http://localhost80/++skin++Rotterdam/@@introspector.html

http://localhost80/++skin++Basic/@@introspector.html

Обратите внимание, что интроспектор доступен только тогда, когда Zope3 стартован в отладочном режиме.

Информация о запущенном процессе:

Под запущенным процессом понимается процесс Zope, выполняющий обработку запросов и другие работы по данному экземпляру Zope'а. Большинство информации о сервере и конкретно по текущему экземпляру Zope можно получить, перейдя к просмотру пространства имён ++etc++process (к просмотру папки ++etc++process, хотя это не совсем папка, но это тема отдельной статьи) по одному из следующих URL:

                http://localhost:8180/++skin++Rotterdam/++etc++process/index.html

                http://localhost:8180/++skin++Basic/++etc++process/index.html

При переходе по указанным адресам, по умолчанию открывается раздел Runtime Information ("Система"), который позволяет получить максимум информации о машине, на которой установлен Zope, о версии запущенного Zope и о большинстве необходимых параметров, таких как версия Python (Python version), путь к файлу, с помощью которого запускается Zope (Command line), предпочитаемая кодировка (Preferred encoding), кодировка файловой системы (FileSystem encoding), идентификатор процесса (Process id), а также список путей, по которым происходит поиск модулей Python'а.

Отсюда же, для пространства имён ++etc++process, можно вызвать уже знакомые нам виды introspector.html и registration.html, которые имеют смысл, аналогичный описанному выше.

Управление сервером:

Управление сервером выполняется с помощью вызова вида servercontrol.html пространства имён ++etc++process, то есть по одному из адресов:

                http://localhost80/++skin++Rotterdam/++etc++process/@@servercontrol.html

                http://localhost80/++skin++Basic/++etc++process/@@servercontrol.html

Данный вид позволяет перезапускать и останавливать запущенный сервер как непосредственно, так и через определённый промежуток времени.

Управление ZODB:

Управление ZODB выполняется с помощью вызова вида ZODBcontrol.html. пространства имён ++etc++process, то есть по одному из адресов:

               http://localhost80/++skin++Rotterdam/++etc++process/@@ZODBControl.html

               http://localhost80/++skin++Basic/++etc++process/@@ZODBControl.html

Раздел ZODB Control ("ZODB") позволяет получить информацию о местоположении файла ZODB, его размере, а также, при необходимости, произвести его сжатие.

Домены переводов:

Раздел Translation Domains ("Переводы"), в который можно попасть вызвав вид TranslationDomain.html пространства имён ++etc++process позволяет узнать о том, какие языки доступны для использования в Zope, а также местоположения файлов, содержащих перевод на интересующий язык.

Специфика скинов:

Последнее, о чём осталось сказать, это о специфике двух самых популярных на сегодняшний день скинов: Rotterdam и Basic.

Специфика скина Rotterdam:

Как было сказано выше, скорее всего всё время работы с Zope3 вы работали именно с этим скином, поэтому ряд его особенностей мог быть вам уже известен.

Первое, что могло броситься в глаза, это то, что все опиcанные выше действия можно было выполнить и не прибегая к изменению URL на нужный, а через пункты каких-либо меню, что делает данный скин гораздо более удобным в использовании, чем Basic.

Те из вас, кто при работе с Zope3 пользовался не самыми новыми браузерами, вероятно мог заметить, что при использовании старых браузеров не работает меню Navigation ("Навигация"). Эту специфику следует отнести, скорее, к специфике браузера, а не скина.

Ещё одной отличительной чертой Rotterdam'а является то, что, как можно заметить, некоторые действия в нём продублированы. Это касается, например, возможности добавления объектов в базу: добавить нужный объект как с помощью специально предназначеннго для этого меню слева, так и с помощью другого меню, расположенного под панелью видов.

В остальном этот скин напоминает привычный старым знакомым Zope тот самый ZMI, который благополучно канул в Лету.

Специфика скина Basic:

Человек, видящий данный скин впервые, особенно после долгого общения с Rotterdam'ом, наверняка спустя несколько секунд работы начнёт задавать себе вопросы наподобие "интересно, а как мне что-то добавить?" или "как бы мне попасть в папку управления сайтом". Подобные вопросы при работе со скином Basic возникают тут и там.

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

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

Например, как добавить что-то в корневую папку? Легко. Для начала надо в неё зайти, перейдя в браузере по следующему адресу:

                http://localhost80/++skin++Basic/@@contents.html

Чтобы что-то добавить, нужно не полениться и руками поправить адрес так, чтобы очутиться на странице добавления элементов. В данном случае требуемый адрес будет следующим:

                http://localhost80/++skin++Basic/@@+

Чтобы, например, перейти к папке управления сайтом, нужно подправить адрес следующим образом:

                http://localhost80/++skin++Basic/++etc++site/@@contents.html

В качестве совета по работе со скином для тех, кто хочет на него пересесть с Rotterdam'а, можно посоветовать первое время использовать в работе оба скина, а когда возникают проблемы попадания в то или иное место системы, брать адрес с Rotterdam'а и подставлять к нему ++skin++Basic.

Кроме вышесказанного, работа с Basic-скином позволяет почувствовать себя в некоторм смысле хакером, который при нехватке каких-то элементов в графическом оформлении не унывает и всегда может сделать что надо из командной строки (а данном случае, строки адреса в браузере).

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

Заключение:

Статья не является исчерпывающим руководством по элементам управления в скинах Zope3, однако большая часть концептуальных элементов в ней всё же была описана, а этого вполне достаточно для начала работ в среде Zope3.

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


Powered by Plone CMS, the Open Source Content Management System