Различия между версиями 1 и 4 (по 3 версиям)
Версия 1 от 2010-06-12 21:51:23
Размер: 2076
Редактор: RostislavDzinko
Комментарий:
Версия 4 от 2010-06-12 22:51:56
Размер: 6929
Редактор: RostislavDzinko
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 7: Строка 7:
This is the second part of the tutorial. In the first part, you learned about project directory structure, Buildout configuration, content components and using the form library. Content components are objects with a user visible view. A view could be a browser view (HTML/JS/CSS) or JSON or XMLRPC or any other view. To explain the idea of content components, the ticket collector project started in the first part of tutorial will be expanded with additional functionality. In fact, the collector object created in the last chapter is a content component. In this chapter, you will create new content objects like tickets and comments. Another thing that should be noted is that every content component, including container components, has well defined interfaces. Это вторая часть учебника. В первой части вы узначли о структуре папок проекта, настройке Buildout, компонентах содержимого, и использовании библиотеки форм. Компоненты содержимого - объекты с видимым для пользователя видом. Вид может быть браузерным (HTML/JS/CSS), JSON, XMLRPC или любым другим. Чтобы обяснить идею контент компонентов, проект, который был начат в первой части учебника, будет расширен путем добавления новых функций. По сути объект коллектор, который был создан в последнем разделе - контент компонент. В этом разделе, вы создадите и другие контент объекты, такие как заявки и комментарии. Также следует упомянуть, что каждый контент компонент, включая контейнеры, имеет хорошо определенные интерфейсы.
Строка 9: Строка 9:
This chapter explores content components in more detail. After completing this chapter, you should be able to: Этот раздел исследует контент компоненты более детально. После окончания раздела, вы будете уметь:
Строка 11: Строка 11:
Define schema for content components
Create container objects
Use ZCML to configure various components
Before proceeding further, here is an overview of what we will cover:
 * Определять схему контент компонентов
 * Создавать контейнеры
 * Использовать ZCML для настройки компонентов
Строка 16: Строка 15:
Adding tickets – In this section you will create a ticket object. We provide a detailed overview of creating content objects and demonstrate with a simple example.
Listing tickets – Next you will see how to display tickets from the main collector page.
Adding comments – Here you will learn how to add content objects inside other container objects. Ticket objects will be transformed to container objects.
Listing comments – In this section you will develop a comment object and write the code needed to display comments on the ticket page.
Note The examples in this documentation can be downloaded from here: http://download.zope.org/bluebream/examples/ticketcollector-1.0.0.tar.bz2
The source code is available in different stages corresponding to sections.
Stage 1 : Section 5.2 to 5.7
Stage 2 : Section 5.8
Stage 3 : Section 5.9
Stage 4 : Section 6.2
Stage 5 : Section 6.3
Stage 6 : Section 6.4 & 6.5
Перед продолжением, вот обзор того, что рассматривается:

 * '''Добавление заявок''' – В этой части вы создадите объект заявки. Мы обеспечим подробный обзор создания контент объектов и покажем их использование на простом примере.
 * '''Списки заявок''' – Дальше вы увидите, как отобразить список заявок на главной странице коллектора.
 * '''Добавление комментариев''' – В этой части вы научитесь добавлять контент объекты внутрь контейнеров. Объекти заявки будут превращены в контейнеры.
 * '''Списки комментариев''' – В этой части вы создадите объект комментарий и напишете код для отображения комментариев на странице заявки.

{{{#!wiki note
Примеры для этой документации могут быть загружены отсюда: 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'', добавив туда интерфейс заявки:

{{{#!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)