Учу и параллельно пишу учебник по Z3

2 views
Skip to first unread message

dem...@gmail.com

unread,
Aug 20, 2010, 11:07:40 AM8/20/10
to Russian Zope3 group
В данный момент начинаю серьезный проект. Проект решил делать на Z3
так, как в проекте будет много дополнений и изменений. проект будет
жить много лет. Несколько раз я пытался написать от начала и до конца
приложения для Z3, но каждый раз не хватало времени, а потом
приходилось начинать все с начала. Поэтому я решил параллельно с
обучением закрепить все "на бумаге".

Таким образом я описываю создание мини приложения, (это конечно далеко
не тот проект который надо создать). В этом мини приложении я описываю
именно те вещи которые мне были не понятны в Z3 раньше. Например все
доступно и ясно с ZPT с Интерфейсами, схемами и ZODB. А вот
пользователи и права на данный момент для меня затык.

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

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

В туториале никак не описаны тесты и прочее, что и так ясно, вот
только если это описывать станет не видно всего остального.

Адрес туториала http://demmsnt.ho.ua/z_tutorial/BBtutorial_win.html
пишу пока в OpenOffice поэтому html там несколько неудобный. Но по
окончании оформлю нормально.

Ilshad Khabibullin

unread,
Aug 20, 2010, 11:39:03 AM8/20/10
to zope...@googlegroups.com
  1. Не понятно как лучше организовывать структуру приложения. С одной стороны для учебника достаточно создать приложение в root, с другой 1 экземпляр Zope в будущем будет обслуживать n приложений и потому для каждого нужно создавать свой контейнер (Site), а в учебнике описать как делать redirect с root.

Тут практически без вариантов, так что незачем голову ломать. Недавно в рассылке bluebream тоже обсуждали, пытались найти аргументы для использования root в качестве единственного сайт-контейнера. И найти такие аргументы не удалось. Если кратко, то использование root в качестве локального сайта вызывает ряд неудобств в период отладки приложения, да и не только.

Как правило - в одном инстансе - один сайт. Там не менее для него делается свой фолдер.

Никаой редирект не делается. Всегда нужно использовать фронтэнд-сервер (nginx, Apache), в котором конфигурируется виртуальный хост (в любом случае их несколько на машине, как правило). Так вот, виртуальный хост конфигурируется не на localhost:8080, но на localhost:8080/++skin++myskin/site

  1. 2)Не понятно как организовать аутентификацию. Это от того, что у меня нет сайт менеджера. Я сделал раздел где вручную это делаю. Как это автоматизировать поудобнее не совсем понятно.

Это общий вопрос, как населять ZODB локальными компонентами при создании и апгрейде сайта. Самое простое - делаем подписчик на создание или добавление локального сайта, например:

 <subscriber
     for=".interfaces.ISite
      zope.lifecycleevent.interfaces.IObjectAddedEvent"
     handler=".handler.projectAdded"
     />

# handler.py:

from zope.site import LocalSiteManager

def siteAdded(site, event):
    site.setSiteManager(LocalSiteManager(site, False))
    # тут же можно напихать и все остальное, добавление разных локальных утилит и т.д.

При таком варианте в этом самом подписчике один раз, при создании сайта, создается и вся структура базы данных. Апгрейды (изменение структуры) делаются так: пишетсся сюда, в подписчик, и дублируется в генерациях (zope.app.gnerations).

Более мощные и гибкие варианты предусматривают использование специальных пакетов, например z3c.configurator

--
Ilshad R. Khabibullin
http://astoon.zwiki.org
+7 922 600 56 06

dem...@gmail.com

unread,
Aug 20, 2010, 11:47:12 AM8/20/10
to Russian Zope3 group

> Никаой редирект не делается. Всегда нужно использовать фронтэнд-сервер
> (nginx, Apache), в котором конфигурируется виртуальный хост (в любом случае
> их несколько на машине, как правило). Так вот, виртуальный хост
> конфигурируется не на localhost:8080, но на
> localhost:8080/++skin++myskin/site

сейчас не могу вот почемуто подключить ротердам. прописал в
buildout.cfg eggs=zope.app.rotterdam
прописал в site.zcml <include package="zope.app.rotterdam" />
Но на http://localhost:8080/++skin++Rotterdam/ получаю старый скин.
Что-то не так.

> При таком варианте в этом самом подписчике один раз, при создании сайта,
> создается и вся структура базы данных. Апгрейды (изменение структуры)
> делаются так: пишетсся сюда, в подписчик, и дублируется в генерациях
> (zope.app.gnerations).
>
> Более мощные и гибкие варианты предусматривают использование специальных
> пакетов, например z3c.configurator

ага я на это кстати обратил внимание. Только в bbru там
z3c.configurator а я не люблю лишних сущностей и тоже подумал про
z3c.configurator
Но в туториале сначала наверное магию не буду использовать. Допишу с
созданием всего и вся вручную. А потом опишу как сделать чтобы
создавалось само.

dem...@gmail.com

unread,
Aug 20, 2010, 11:51:12 AM8/20/10
to Russian Zope3 group
Да насчет скина:
Когда пишу http://localhost:8080/++skin++Rotterdam/@@contents.html
получаю ошибку:
NotFound: Object: <zope.site.folder.Folder object at 0xb392eec>, name:
u'@@contents.html'

Ilshad Khabibullin

unread,
Aug 20, 2010, 11:53:22 AM8/20/10
to zope...@googlegroups.com
Из 3 следует, что не понятно как разрешить доступ только владельцу контейнера.

эта вся наука называется "local permissions". Нужно смотреть в zope.securitypolicy.interfaces, и брать нужные менеджеры. На примере bbru, 3 действия:

  1. http://github.com/astoon/bbru/blob/master/src/bbru/answers/browser/answer/add.py стр.27-28 - данному принципалу назначается данная локальная роль, что означает что эта роль есть у него только у него и только здесь.
  2. Соответствующее право доступа нужно задекларировать (т.е. факт его существования) в zcml: http://github.com/astoon/bbru/blob/master/src/bbru/answers/security.zcml
  3. Здесь в стр.33-37 объявляется роль, в стр.18-21 объявляется собственно право доступа, стр.79-82 - делается grant (как по-русски сказать?) этого права доступа на эту роль.
Можно применять другие менеджеры из zope.securitypolicy.interfaces, например без ролей делать напрямую данному пользователю нужные права. Но - даже в других (не-zope) системазх всегда используется дополнительный слой абстракции в виде ролей,  и преимущества от этого... наверное можно догадаться.

Ilshad Khabibullin

unread,
Aug 20, 2010, 12:01:55 PM8/20/10
to zope...@googlegroups.com

20 августа 2010 г. 21:51 пользователь dem...@gmail.com <dem...@gmail.com> написал:
contents.html - это подсистема ZMI. Если кратко, то подключение include package="zope.app.zcmlfiles" должно все включить, будет классический zope3.

 
--
Russian Zope3 group http://zope3.ru/
Для отправки сообщений zope...@googlegroups.com
Отписаться zope3-ru-u...@googlegroups.com
Архив http://groups.google.com/group/zope3-ru
Reply all
Reply to author
Forward
0 new messages