Pular para o conteúdo. Ir para a navegação
Ações do site
Opções do usuário

TcheZope.org

Você está aqui: Página Inicial Documentação Manuais Guia do Desenvolvedor do Zope
Ações do documento

Guia do Desenvolvedor do Zope

Aviso: Esta é a visão de impressão com todas as páginas do Manual de Referência em uma página. A versão paginada está disponível aqui, se você preferir esta.

Tradução do "The Zope Developer's Guide"

1. Introdução

Seção introdutória
Bem vindo ao Zope, a primeira plataforma para desenvolvimento de aplicações dinâmicas para a web.

Para usar o Guia do Desenvolvedor do Zope você precisa ter conhecimento de Python e programação para Internet. Você também deve estar familiarizado com o Zope do ponto de vista de um administrador.

Estendendo o Zope

Uma das maiores características do Zope é o fato de que se tornou um software de código aberto. O código fonte completo do Zope está disponível para você ler atentamente e estender. O Zope é quase todo escrito em Python o que faz com que seja razoavelmente fácil de entender e mudar.

Entretanto, Zope é um sistema amplo que executa muitas funções e inclui diferentes componentes. Pode ser difícil entender como ele funciona sem ajuda. Este guia pretende oferecer a você um background, exemplos, e informações técnicas que você precisa para entender como o Zope funciona e estendê-lo adequando-o a suas necessidades.

Opções de Desenvolvimento do Zope

Você não precisa ir modificar agora o código fonte do Zope. De fato, o Zope pode ser estendido em muitos níveis, e você não precisa a cada passo modificar o código para modificar o Zope e contemplar suas necessidades. Aqui estão algumas dicas de como você pode fazer desenvolvimentos com o Zope:
  • Você pode usar no Zope scripts como Document Template Markup Language (DTML) nos objetos DTML Document (Documento DTML) e DTML Method (Método DTML). Isto dá a você acesso limitado ao interior do Zope e uma maneira fácil de usar formulários
  • Você pode escrever métodos em Python e importá-los para o Zope usando objetos External Method (Métodos Externos). Isto permite que você adicione códigos complexos do Python para seus objetos em Zope
  • Você pode usar Z Classes para criar novos tipos de objetos no Zope através da web. Criando seus próprios tipos de objetos no Zope você pode adaptar o Zope a suas necessidades
  • Você pode escrever novos tipos de objetos no Zope em Python. Esta opção oferece os mesmo benefícios das Z Classes mas em puro Python. Você pode querer combinar este método com as Z Classes
  • Você pode usar pacotes do códogo fonte do Zope em seus próprios programas em Python. Isto permite que você publicar objetos sem o sistema de gerenciamento do Zope, ou você pode querer usar outros componentes do Zope para dar persistência aos objetos, ou capacidades de geração de textos para seus programas em Python
  • Você pode rodar scripts para instalações remotas do Zope com o pacote Zpublisher.Client. Isto permite que você se conecte a objetos remotos do Zope como se eles fossem objetos locais
  • Você modifica os fontes do Zope para fazer com que suas funções fiquem diferentes. Se você não gosta de como o Zope faz alguma coisa, você pode mudá-lo.
  • Você pode estender os fontes do Zope para adicionar novas funcionalidades a ele. Você pode estender o alcance do Zope construindo novos pacotes para o Zope que você pode escolher compartilhar com a comunidade do Zope.

Suas escolhas são muitas, e de fato você provavelmente encontrará a sua combinando várias dessas dicas.

Este Guia mostrará estas opções de desenvolvimento em diferentes capítulos. Não é essencial ler todos os capítulos em ordem, o material está organizado de forma que ler o primeiro capítulo o ajudará a entender os capítulos seguintes.

2. Z Classes

Sobre Z Classes em Zope

Introdução a Z Classes


O que são Z Classes?

Z Classes anunciam uma nova era no desenvolvimento do Zope. Z Classes permitem que você construa seus próprios tipos de objetos através da web. De modo que, ao invés de estar limitado a objetos existentes como Folders (Pastas) e DTML Documents, quando estiver construindo seu site, você pode agora definir suas próprias classes de objetos. Por exemplo, se seu site inclui coisas como manuais dos funcionários, relatório de erros, etc., então você pode criar objetos para Manuais do Funcionário, e objetos para Relatório de Erros, e para os demais. Concluindo, as Z Classes deixam você criar e armazenar "seus tipos de coisas" ao invés de coisas do Zope.

Você define suas classes no Control Panel (Painel de Controle), e então você pode criar e manipular seus objetos bem como você cria e manipula Folders, DTML Documents, e todos os outros objetos padrões do Zope. Conforme você muda e atualiza suas classes, todas as instâncias existentes dessas classes são atualizadas. Assim se você adicionar um novo método a sua classe Manual do Funcionário, todos os seus objetos Manual do Funcionário serão atualizados.

Você pode exportar suas Z Classes e usá-las em diferentes instalações do Zope, permitindo então que você alavanque seu trabalho pelas instalações do Zope.

Basicamente as classes do Zope fazem com que o Zope se estenda com mais facilidade. De fato não é exigido nenhuma programação em Python. É uma grande mudança de quando se usava o Produto API e Python para estender o Zope. Agora construir novas classes é tão fácil que você pode fazer várias classes especializadas para resolver problemas específicos.


Conhecimento Necessário


Para começar você deve estar familiarizado com a criação de Products (Produtos) através do Zope Control Panel (Painel de Controle do Zope). Este processo é mostrado no Content Manager's Guide (Guia de Gerenciamento de Conteúdo do Zope).

Trabalhar com Z Classes construídas na área de Criação de Produtos existentes no Zope facilita mas estende-as de maneiras importantes. A diferença básica entre criar Produtos tradicionais através do Control Panel e criar Produtos Z Class é que com as classes seus objetos retêm um conexão com as suas classes. Assim quando você faz alguma modificação em sua classe, suas instâncias são atualizadas. Com o tradicional Products do Control Panel nenhum link entre o Control Panel e o objeto criado é guardado, o Factory (Fábrica, de objetos) simplesmente cria um objeto na hierarquia do objeto do Zope.


Iniciando com Z Classes


Visão Geral


Vamos começar usando Z Classes construindo um exemplo simples de classe que representa um CD de música.

Nesta cenário, queremos que as pessoas preencham os formulários que coletam informações sobre CDs em suas coleções de músicas. Para criar novos "registros", as pessoas escolhem o que foi definido recentemente dos tipos de "coisas" para adicionar em seu folder.

Passos Básicos

Aqui estão os passos básicos exigidos para construir um simples Produto do Zope com Z Classes.

   1. Crie uma Z Class.
   2. Forneça algumas informações sobre a Z Class.
   3. Defina um Property Sheet (Folha de Propriedade) para a Z Class.
   4. Crie uma View (aba).

Criando uma Z Class Simples

Comece indo ao Folder Control_Panel/Products e Crie um novo Produto. Clique "Add" e especifique "CD Product" para o Id do Produto. Então clique em "Generate". Você criou um novo Produto do Zope. Seu produto deve estar visível dentro do Folder Control_Panel/Products.

Agora vá até o Folder do Produto "CDProduct" e crie uma Z Class selecionando "Z Class" da lista de adição de produtos. Para o Id da classe especifique "CDClass", e para o "Meta type" especifique "CD", e certifique-se que "Create constructor objects." está checado. Não se preocupe com o controle das "Base Classes" por enquanto. Clique "Add", e você acabou de criar sua primeira Z Class.


Figura 1 - Formulário de adição da Z Class


Agora vamos setar nossa nova classe CD. Você notará que depois que você adicionar sua Z Class, o Zope cria cinco novos objetos para você.
# uma Z Class chamada "CDClass" que é nossa Z Class,
# um DTML Method chamado "CDClass_add",
# um DTML Method chamado "CDClass_addForm",
# um Zope Permission chamado "CDClass_add_permission",
# e um Factory (Fábrica, de objetos) chamado "CDClass_factory".

Os objetos construtores são criados pelo Zope para ajudar você a criar novas instâncias de sua classe.

Vamos olhar para o objeto Z Class. Clique no objeto "CDClass" dentro do Folder "CDProduct". Será mostrada a tela de gerenciamento de Métodos da Z Class. Agora nossa Z Class não tem métodos, assim nenhum objeto método é listado nesta tela. Agora clique na aba de gerenciamento "Basic". Aqui podemos setar algumas propriedades da Z Class, como "meta type" e ícone da classe. Um "meta type" é o nome da sua classe como vai aparecer na lista de adição de produtos. Seu "meta type" da classe deve ser "CD". O ícone da classe pode ser definido aqui atualizando um arquivo. Você também verá um id da classe que você poderá ignorar no momento.


Criando uma Property Sheet

Agora vamos dar a nossa classe algumas propriedades. Podemos fazer isso criando uma ou mais Property Sheets para nossa classe. Uma Property Sheet é um esquema que descreve que tipo de instâncias de propriedades nossa classe terá. Para criar uma Property Sheet clique na aba "Property Sheets". Isto leva você à tela de gerenciamento Property Sheets.

Crie uma Property Sheet clicando em "Add" na tela de gerenciamento das Property Sheets. Então especifique "cd_info" como Id da Property Sheet. Agora você deve ter um novo objeto Property Sheet listado na tela de gerenciamento das Property Sheets. Clique em "cd_info" para editar sua Property Sheet.


Figura 2 - Tela de gerenciamento da Property Sheet


Agora você deve ver uma tela de gerenciamento conhecida para setar propriedades no Zope. É importante lembrar que agora não estamos setando as propriedades de um CD individual, mas estamos definindo propriedades que todas as instâncias CD terão. Crie uma propriedade "title" e "artist", ambos do tipo string. Então crie uma propriedade texto chamada "description".


Criando uma Aba


Agora vamos adicionar uma View (aba) a nossa classe que nos deixará usar o gerenciamento dessas propriedades. Uma View é uma tela de gerenciamento que está disponível através de uma aba de gerenciamento. Clique na aba "Views" para editar uma View da classe. Agora você pode ver que nossa classe atualmente tem somente uma View, "Security". Esta view chama o o método manage_access da classe.

Crie uma nova view chamada "Properties" que chama o método propertysheets/cd_info/manage da classe. Preencha o formulário "New" e clique em "Add". Agora você pode ver que sua classe tem duas Views. Vamos fazer a View "Properties" ser a primeira ou a view default clicando no checkbox próximo a ela e clicando "First". Agora "Properties" deve estar no topo da lista das Views.


Figura 3 - Tela de gerenciamento da View depois que você adicionou a View "Properties".



Criando Instâncias da Z Class

Agora que você começou sua classe, é hora de criar uma instância. Para que seu objeto apareça na lista de adição de produtos do Zope você deve criar uma Factory junto com um add form (formulário de adição) e um add method (método de adição). Lembre que o Zope já criou estes objetos para nós quando criamos nossa Z Class. Mais tarde podemos querer voltar e padronizar estes objetos, mas não por hora.

Vá para o Folder de nível mais alto do Zope e escolha "CD" da lista de adição de produtos. Você tem que colocar um Id. Chame-o de "myCD" e clique em "Add". Parabéns, você criou sua primeira instância da Z Class "CDClass".


Usando Instâncias da Z Class

Para saber mais sobre nossa classe, vamos explorar uma instância.

Clique no objeto do CD "myCD" que você acabou de criar. Você notará que você pode editar as propriedades do CD com a aba "Properties", e pode editar suas configurações de segurança com a aba "Secutrty". Através da interface de gerenciamento você tem acesso a duas abas de gerenciamento que você definiu como as "Views" da Z Class.

Para relembrar, volte a sua Z Class e adicione outra propriedade para a Property Sheet "cd_info". Por exemplo, você pode adicionar uma propriedade "genre" para sua property sheet. Agora volte ao seu objeto CD, "myCD". Veja que a nova propriedade está agora disponível através da aba de gerenciamento "Properties". Esta é a mágica das classes. Quando você muda uma classe, todas as instâncias da classe são afetadas.

Além disso para estar apto a gerenciar suas instâncias das classes através da web, você pode também acessá-las através do DTML. Por exemplo, suponha que você criou um objeto CD chamado "SuperOldies_vol42". Em um DTML Documento você pode buscar este objeto assim:

<p>Informação sobre um CD:</p><br>
<dtml-with SuperOldies_vol42><br>
<p>Title: <dtml-var title></p><br>
<p>Artist: <dtml-var artist></p><br>
<p>Description: <dtml-var descricao html_quote newline_to_br></p>
</dtml-with>

Em outras palavras, seu objeto CD é um objeto do Zope normal e você pode acessar suas propriedades como você acessa as propriedades do Folder. Você também pode manipular suas propriedades do mesmo modo que você manipula as propriedades de outros objetos no Zope. Por exemplo, aqui está um fragmento de um DTML que muda algumas propriedades de nosso objeto CD:

<dtml-call "SuperOldies_vol42.manage_changeProperties({
  'title' : 'Super Oldies volume 42',
  'artist' : 'Various Artists',
  'description' : 'Greatest hits of many has beens.'
  })">

Instâncias das Z Classes herdam todos os métodos de suas base classes. Em nosso simples exemplo, nossa classe CD herda os métodos base disponíveis a todos os Produtos do Zope automaticamente sem ter que especificar isto. Em termos técnicos, todas as Z Classes herdam do SimpleItem.Item.


Aprofundando nas Z Classes

Agora que nós temos um exemplo básico de como trabalhar com Z Class, vamos retomar a alguns detalhes que nós anotamos quando criamos nosso exemplo da classe CD.

Propriedades Básicas da Z Class

Na tela de gerenciamento da aba "Basic" da Z Class você pode configurar os ícones da classe além de definir o "meta type" da Z Class. Entretanto, você não pode mudar a base class da Z Class ou as bases das classes.

Um ícone da Z Class é usado na interface de gerenciamento do Zope para identificar instâncias da Z Class. Você deve usar um arquivo GIF para seu ícone que seja de 16 por 16 pixels. O ícone deve ter um fundo transparente. Você pode setar um ícone da classe atualizando o arquivo do ícone. Isto criará o ícone e definirá a URL do ícone. Você pode mudar o ícone atualizando novos arquivos do ícone. Se você precisar, você pode mudar a URL do ícone, mas em geral não é necessário.


Z Classes e Herança

Quando você cria primeiramente uma Z Class é apresentado um complexo controle que permite que você especifique suas base classes da classe. Sua Z Class herda os métodos e atributos de todas as suas base classes. Se você não especificar nenhuma base class sua classe ainda herdará características básicas do Zope que são definidas pela classe OFS.SimpleItem.Item. Isto é geralmente o que você quer, e isto permite que instâncias de sua classe executem funções normais do Zope tais como gerenciamento de propriedades. Se você quiser que sua classe tenha a capacidade de conter outros objetos, como em um Folder, então você tem que ter a super classe "Object Manager". Isto vai oferecer a você que todos os métodos padrões suportem objetos contidos. Outras base classes podem estar disponíveis dependendo em qual extensão do Zope você instalou.

Além disso para herdar classes existentes, você também pode herdar outras Z Classes. Esta é uma característica muito poderosa. Isto permite que você construa classes complexas e relacionadas.

Outra coisa para observar é que você pode herdar mais de uma base class. Este é um fato no qual o Python difere de outras linguagens orientadas a objeto. Quando você herda mais que uma classe, a ordem das base classes é importante, porque isto determina a ordem na qual as classes são procuradas quando adquirem métodos e atributos. Para controlar a ordem das base classes quando criar uma Z Class mova as classes base para trás e para frente entre as caixas selecionada e não selecionada até que você as tenha na ordem correta.


Ids da Classe

Todas as Z Classes têm ids que são editáveis da tela de gerenciamento "Basic". O Zope atribuirá um id único da classe para sua Z Class. Sob circunstâncias normais você não vai ter que mudar este id. Entretanto, este id da classe é importante para o Zope, pois é como o Zope identifica que Z Classes vão com quais instâncias da Z Class. O único momento em que você vai se preocupar com os ids da classe é quando você quiser substituir uma Z Classe por outra e mandar todas as instâncias da Z Class existentes reconherem a nova Z Class. Neste caso você terá que certificar-se de que a nova Z Class tem o mesmo id da classe que foi substituída por esta.


Criando Métodos

A heavy lifting da classe é feita por seus métodos. Além disso, para definir um esboço da propriedade, sua principal tarefa na construção manual da Z Class será construir uma coleção de métodos que manipulem as propriedades da sua classe e façam o trabalho útil.

Para criar métodos para sua classe, você simplesmente cria objetos na aba de gerenciamento "Methods". A maior parte de seus métodos consistirão de objetos DTML Method, objetos SQL Method e objetos External Method. Estes objetos do Zope oferecerão todas as instâncias de sua classe com serviços que apenas elas oferecem a seus Folders se eles não forem definidos como métodos da Z Class. Em outras palavras, não há nada de novo ou incomun sobre objetos método; eles estão simplesmente disponibilizados para instâncias da classe através da Z Class a menos que seja através de uma aquisição.

Um método útil para criar é o método especial index_ html que é usado para mostrar um objeto quando chamado da web. Como os Folders gerenciam sua vizualização default com um objeto "index_html", você pode controlar a representação default da sua classe. Por exemplo, nossa classe CD deve definir um DTML Method com o id "index_html" assim:

<dtml-var standard_html_header>
<h1>CD</h1>
<p>Title: <dtml-var title></p>
<p>Artist: <dtml-var artist></p>
<p>Description: <dtml-var description html_quote newline_to_br></p>
<dtml-var standard_html_footer>

Métodos que você quer que estejam acessíveis através da web e do DTML, precisam ser mapeados para as permissões. Veja "Criando e Gerenciando Permissões" (Creating and Managing Permissions) na página 9.


Criando Property Sheets

Nós já mostramos a maioria das coisas que estão envolvidas na criação das Property Sheets. Para relembrar, Property Sheets permitem que as Z Classes mantenham propriedades simples. Property Sheets são gerenciadas pela aba de gerenciamento "Property Sheets". Um uso comum para Property Sheets é criar Views (abas) de gerenciamento para instâncias da Z Class.

Agora há somente uma forma de tornar a Property Sheets acessível, a "instância comum da property sheet" (common instance property sheet). Este tipo de Property Sheet armazena suas propriedades como atributos das instâncias da Z Class. Assim, por exemplo, se uma instância tem uma propriedade chamada "title" definida em uma instância comum da property sheet chamada "stuff", setando esta propriedade iremos afetar o atributo "title" desta instância. Isto é o que você deve esperar normalmente das propriedades.

Property Sheets também permitem maior acesso indireto pelos atributos da propertysheets. Assim em nosso exemplo acima nós podemos acessar a propriedade "title" através do atributo propertysheets.stuff.title além do simples atributo title. O tipo de acesso é feito no caso de duas property sheets diferentes definirem propriedades com o mesmo nome.

Como nos métodos da Z Class, Property Sheets são mapeadas para classificar permissões a fim de definir configurações de segurança para uma Z Class. Veja "Criando e Gerenciando Permissões" (Creating and Managing Permissions) na página 9.


Criando Views (abas)

Nós já mostramos quase tudo para criarmos Views (abas). Views definem telas de gerenciamento que são acessíveis via abas, formando a tela de gerenciamento do Zope. As Views tornam fáceis o manejo das instâncias da Z Class através da web. A principal coisa a acrescentar sobre a nossa discussão anterior é que por default nossa Z Class começa com as mesmas abas que suas subclasses.

Além disso, as Views são somente visíveis da interface de gerenciamento quando os métodos associados com as Views são mapeados para permissões que o usuário está designado a acessar. Deste modo, usuários com diferentes níveis de acesso têm diferentes abas de gerenciamento.


Criando e Gerenciando Permissões

O Zope gerencia segurança através de um sistema de permissões e papéis (roles). Aos Usuários são designadas funções e aos objetos permissões. Através da interface de gerenciamento você pode ligar permissões a funções para objetos específicos. Veja o Guia do Gerenciador de Conteúdos do Zope (Zope Content Manager’s Guide) para maiores informações sobre segurança.

Para nossas finalidades, você deve entender que as permissões da classe definem coleções de métodos que são agrupados em grupos relativos. Em outras palavras, você deve pensar que sua classe oferece um número de serviços distintos. Para cada serviço você deve oferecer uma permissão que controla o acesso ao serviço.

Usando as Z Classes seu trabalho é definir permissões para sua classe de modo que o controle de acesso possa ser setado nas instâncias da sua classe.

O primeiro passo para definir as permissões da sua classe deve ser a criação de métodos e Property Sheets para sua classe. Depois sua classe pode fazer algo, então você deve decidir como descrever o que ela pode fazer em termos de permissão. Você deve ver se seus métodos estão protegidos pelas permissões existentes ou se seria melhor criar novas permissões. Por exemplo se sua classe tem um método "index_html", este método é usado para visualizar instâncias da classe, assim você pode provavelmente usar a permissão "View" existente com este método. Se sua classe define um número de métodos para acessar servidores remotos, você talvez queira criar uma nova permissão para estes métodos chamada "Acesso a servidores remotos" (Access remote server). Uma convenção comum do Zope é ter uma permissão para adicionar objetos de uma dada classe e outra para gerenciamento geral destes objetos. Se seu meta_type da classe é "My Object" então estas permissões deveriam ser chamadas "Add My Objects" e "Change My Objects".

Pra controlar a qual permissão um dado método está limitado, clique na aba "Define Permissions" (Definir Permissões) enquanto estiver gerenciando a permissão da classe. Será mostrado um formulário que mapeia as permissões do método para as permissões da classe. Isto parece complexo mas em geral você somente quer ligar uma permissão do método a uma permissão. No caso de DTML Methods este será o método "View". A razão para isto é que você realmente quer que as instâncias da sua classe sejam capazes de "Visualizar" um DTML Method. Uma instância não deve ser capaz de executar outras ações nestes métodos nem editá-las.


Figura 4 - Tela de gerenciamento "Define Permissions" para um método da Z Class.


Property Sheets podem ser mapeadas para as permissões das classes do mesmo modo que os Métodos são mapeados para as permissões das classes. Enquanto estiver editando uma Property Sheet clique na aba "Define Permissions". Será mostrada a tela de gerenciamento de mapeamento de permissão. Em geral você vai querer mapear todas as permissões da Property Sheet para permissões idênticas da classe para fazer com que suas Property Sheets sejam totalmente acessível das instâncias das classes.

Para criar novas permissões inteiramente você deve adicionar objetos de Permissão do Zope ao seu Folder Product. Quando criar novas permissões você deve lembrar que os nomes das permissões devem ser únicos. Em geral você deve limitar o número de novas permissões que você criar ao menor número possível. Isso faz com que seja mais fácil para os gerenciadores controlar as configurações de segurança das instâncias de sua classe.

Você pode controlar que permissões estão disponíveis para sua Z Class indo a aba de gerenciamento "Permissions" (Permissões). Sua classe herda permissões de suas classes base (base classes), assim não é necessário adicionar novas permissões.

Além disso, Z Classes têm uma aba "Define Permissions" que permite que você mapeie permissões para as operações da Z Class. Em geral a única operação que você pode expor é a operação "Create class instances" (Criar instâncias da classe) que deve ser limitada a permissão que é usada para a inicialização. O Zope normalmente cuida deste detalhe para você, por exemplo, na classe exemplo CD, o Zope automaticamente cria uma permissão "Add CDs" e mapeia "Create class instances" para esta permissão.


Subobjetos


Se você criar uma Z Class que é uma subclasse do "Object Manager" você estará apto a controlar quaisquer tipos de objetos que eles contenham. A tarefa é executada da tela de gerenciamento "Subobjects". Desta aba de gerenciamento você pode selecionar tipos de objetos que podem ser adicionados a instâncias de sua classe como subobjetos.

Se a opção "Objects should appear in folder lists" (Objetos devem aparecer nas listas dos folders) estiver checada então as instâncias da classe aparecerão expandidas no frame esquerdo da interface de gerenciamento do Zope. Em geral esta opção é apropriada quando você quer que seu objeto atue como um container (recipiente) normal do Zope.


Classes Dentro de Classes


Um cenário comum é criar uma Z Class que herda de um ObjectManager, e então criar várias classes que devem ser usadas exclusivamente dentro de uma classe container. Um exemplo pode ser uma classe CDLibrary e uma classe CD. Os objetos CD nunca devem aparecer fora dos objetos CDLibrary.

Uma maneira simples de efetuar este tipo de coisa é criar classes dentro de outras classes. As classes contidas devem ser criadas dentro da aba "Methods" da classe que a contém. O Zope irá automaticamente adicionar as classes contidas à lista de sub-objetos da classe container.

Outra razão para criar classes dentro de classes é evitar que as classes internas apareçam na lista global de adição de produtos. Somente classes com Factories associadas que são criadas diretamente dentro dos Folders Product aparecerão na lista global de adição de produtos.


Factories, Métodos de Adição e Controles


Para fazer um Produto aparecer na lista global de adição de produtos você precisa criar uma Factory. Este processo é visto no Guia de Gerenciamento de Conteúdo do Zope (Zope Content Manager’s Guide), assim aqui ele somente será brevemente explicado. Uma Factory liga um "meta type" a um formulário de adição e a um método de adição. Basicamente o processo é este: se o usuário tem permissões adequadas, o "meta type" aparece como uma escolha na lista de adição de produtos. Quando é escolhido, o obejto formulário de adição é chamado. O objeto formulário de adição coleta as informações necessárias para inicializar o objeto e chama o método de adição que inicializa um novo objeto e o coloca em seu objeto repositório.

Z Classes facilita a tarefa de criar Factories e adicionar métodos permitindo que você crie-os automaticamente quando você criar sua Z Class. Simplesmente oferecendo um "meta type" e checando o check box "Create constuctor objects" quando criar sua Z Class. O Zope então criará os objetos necessários para você e sua classe estará acessível da lista global de adição de produtos.


Herdando das Classes Padrões do Python

Uma técnica muito útil é criar uma classe Python que é herdada por uma Z Class. Desta forma você pode escrever suas aplicações lógicas em Python, e usar sua interface para o usuário em Zope!

Para criar uma classe em Python que é herdada por uma Z Class você precisa criar um Produto Zope simples em Python. Seu Produto deve consistir de um pacote Python instalado dentro do diretório lib/python/Products. No arquivo __init__.py do pacote você precisa registrar sua classe Python como herdada por uma Z Class.

Para completar crie uma função initialize no arquivo __init__.py do pacote assim:

import MyModule

def initialize(context):
   """
   This function is called by Zope to initialize a Product. See
   lib/python/App/ProductContext for more information about
   Product initialization.
   """
   context.registerBaseClass(MyModule.MyClass)

Agora sua classe Python está pronta para ser usada com uma subclasse da Z Class. Você deve observar que o __init__ method da subclasse não será chamado quando as instâncias da Z Class forem criadas. Você também deve observar que sua subclasse deve obedecer às regras de persistência do ZODB, que basicamente determinam que sub objetos variáveis devem ser tratados sem modificação. Por exemplo:

self.bird='parrot' # OK

self.map['bird']='parrot' # NOT OK, will not trigger persistence machinery

m=self.map
m['bird']='parrot'
self.map=m # OK, treats a mutable object immutably

Você provavelmente deve observar este tipo de subclasse como um tipo de mistura na classe.Provavelmente é melhor deixar a maioria dos métodos específicos para frameworks para a Z Class e concentrar sua aplicação lógica na classe Python.

Navegação
Enquete
Como você efetiva sua participação comunitária?








Mais »