Различия между версиями 3 и 4
Версия 3 от 2010-06-12 22:45:34
Размер: 3460
Редактор: RostislavDzinko
Комментарий:
Версия 4 от 2010-06-12 22:51:56
Размер: 6929
Редактор: RostislavDzinko
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 34: Строка 34:

== Добавление заявок ==

=== Определение схемы ===

В этом разделе вы научитесь добавлять заявки в коллектор. Для того, чтобы использовать объекты заявки, вам нужно создать интерфейс заявки. Обновите ''src/tc/collector/interfaces.py'', добавив туда интерфейс заявки:

{{{#!highlight python
from zope.container.interfaces import IContainer

class ITicket(IContainer):
    """Ticket - the ticket content component"""

    number = TextLine(
        title=u"Number",
        description=u"Ticket number",
        default=u"",
        required=True)

    summary = Text(
        title=u"Summary",
        description=u"Ticket summary",
        default=u"",
        required=True)
}}}

'''!TextLine''' и '''Text''' должны быть проимпортированы, если нет - проимпортируйте их:

{{{#!highlight python
from zope.schema import TextLine
from zope.schema import Text
}}}

Будет очень хорошо, если вы установите предусловие для ограничения на типы объектов, добавляемых в коллектор. Если вы знаеие, что в объект коллектор можно добавлять только объекты заявки, добавьте предусловие для того, чтобы удостоверится, что в коллектор будут добавлять только заявки. Для того, чтобы сделать это, вам нужно добавить метод '''_ _setitem_ _''' интерфейса ICollector в определение интерфейса ( '''_ _setitem_ _''' - часть API интерфейсв IContainer). Ниже нужно добавить атрибут предусловия, который является экземпляром класса '''!ItemTypePrecondition'''. Вы можете передать в класс temTypePrecondition интерфейсы в качестве аргументов. Below, only one class (ITicket) is passed. So, only ticket objects are allowed inside a collector. You need to move the definition of ITicket above the IContainer as the ITicket is used by it. Add the following method definition to the ICollector class:

from zope.container.constraints import ItemTypePrecondition

def __setitem__(name, object):
    """Add an ICollector object."""

__setitem__.precondition = ItemTypePrecondition(ITicket)
The ItemTypePrecondition provides a way to restrict the type of object which can be added inside a container. You can also specify that ticket objects can be only added inside a collector. To do this, you need to create another interface inheriting from zope.container.interfaces.IContained.

from zope.schema import Field
from zope.container.interfaces import IContained
from zope.container.constraints import ContainerTypesConstraint

class ITicketContained(IContained):
    """Interface that specifies the type of objects that can contain
    tickets. So a ticket can only contain in a collector."""

    __parent__ = Field(
        constraint = ContainerTypesConstraint(ICollector))
Here you added a constraint for __parent__ field using the ContainerTypesConstraint class.

Учебник - часть 2

Введение

Это вторая часть учебника. В первой части вы узначли о структуре папок проекта, настройке Buildout, компонентах содержимого, и использовании библиотеки форм. Компоненты содержимого - объекты с видимым для пользователя видом. Вид может быть браузерным (HTML/JS/CSS), JSON, XMLRPC или любым другим. Чтобы обяснить идею контент компонентов, проект, который был начат в первой части учебника, будет расширен путем добавления новых функций. По сути объект коллектор, который был создан в последнем разделе - контент компонент. В этом разделе, вы создадите и другие контент объекты, такие как заявки и комментарии. Также следует упомянуть, что каждый контент компонент, включая контейнеры, имеет хорошо определенные интерфейсы.

Этот раздел исследует контент компоненты более детально. После окончания раздела, вы будете уметь:

  • Определять схему контент компонентов
  • Создавать контейнеры
  • Использовать ZCML для настройки компонентов

Перед продолжением, вот обзор того, что рассматривается:

  • Добавление заявок – В этой части вы создадите объект заявки. Мы обеспечим подробный обзор создания контент объектов и покажем их использование на простом примере.

  • Списки заявок – Дальше вы увидите, как отобразить список заявок на главной странице коллектора.

  • Добавление комментариев – В этой части вы научитесь добавлять контент объекты внутрь контейнеров. Объекти заявки будут превращены в контейнеры.

  • Списки комментариев – В этой части вы создадите объект комментарий и напишете код для отображения комментариев на странице заявки.

Примеры для этой документации могут быть загружены отсюда: http://download.zope.org/bluebream/examples/ticketcollector- 1.0.0.tar.bz2.

Исходники доступны на разных этапах соответственно разделам:

  • Этап 1 : От раздела 5.2 до 5.7
  • Этап 2 : Раздел 5.8
  • Этап 3 : Раздел 5.9
  • Этап 4 : Раздел 6.2
  • Этап 5 : Раздел 6.3
  • Этап 6 : Раздел 6.4 и 6.5

Добавление заявок

Определение схемы

В этом разделе вы научитесь добавлять заявки в коллектор. Для того, чтобы использовать объекты заявки, вам нужно создать интерфейс заявки. Обновите src/tc/collector/interfaces.py, добавив туда интерфейс заявки:

   1 from zope.container.interfaces import IContainer
   2 
   3 class ITicket(IContainer):
   4     """Ticket - the ticket content component"""
   5 
   6     number = TextLine(
   7         title=u"Number",
   8         description=u"Ticket number",
   9         default=u"",
  10         required=True)
  11 
  12     summary = Text(
  13         title=u"Summary",
  14         description=u"Ticket summary",
  15         default=u"",
  16         required=True)

TextLine и Text должны быть проимпортированы, если нет - проимпортируйте их:

   1 from zope.schema import TextLine
   2 from zope.schema import Text

Будет очень хорошо, если вы установите предусловие для ограничения на типы объектов, добавляемых в коллектор. Если вы знаеие, что в объект коллектор можно добавлять только объекты заявки, добавьте предусловие для того, чтобы удостоверится, что в коллектор будут добавлять только заявки. Для того, чтобы сделать это, вам нужно добавить метод _ _setitem_ _ интерфейса ICollector в определение интерфейса ( _ _setitem_ _ - часть API интерфейсв IContainer). Ниже нужно добавить атрибут предусловия, который является экземпляром класса ItemTypePrecondition. Вы можете передать в класс temTypePrecondition интерфейсы в качестве аргументов. Below, only one class (ITicket) is passed. So, only ticket objects are allowed inside a collector. You need to move the definition of ITicket above the IContainer as the ITicket is used by it. Add the following method definition to the ICollector class:

from zope.container.constraints import ItemTypePrecondition

def setitem(name, object):

  • """Add an ICollector object."""

setitem.precondition = ItemTypePrecondition(ITicket) The ItemTypePrecondition provides a way to restrict the type of object which can be added inside a container. You can also specify that ticket objects can be only added inside a collector. To do this, you need to create another interface inheriting from zope.container.interfaces.IContained.

from zope.schema import Field from zope.container.interfaces import IContained from zope.container.constraints import ContainerTypesConstraint

class ITicketContained(IContained):

  • """Interface that specifies the type of objects that can contain tickets. So a ticket can only contain in a collector."""

    parent = Field(

Here you added a constraint for parent field using the ContainerTypesConstraint class.

Документации/Bluebream/BluebreamУчебник2 (последним исправлял пользователь RostislavDzinko 2010-06-13 19:31:48)