Você está na página 1de 72

Zope

18 de abril de 2007
Sumário

I Sobre essa Apostila 2

II Informações Básicas 4

III Zope 9

1 O que é o Zope 10

2 Plano de ensino 11
2.1 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 Público Alvo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3 Pré-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4 Descrição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.5 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.6 Cronograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.7 Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.8 Avaliação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.9 Bibliografia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3 Introdução 14
3.1 Introdução ao Zope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.2 Instalação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

4 Interface de Gerenciamento do Zope 17


4.1 Ingressando na interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.2 Contas de Usuários . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.3 Criando Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

5 Trabalhando com Objetos 22


5.1 Modelos de Páginas do Zope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
5.2 DTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.3 History de documentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5.4 FTP, WebDAV e PUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5.5 Arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
5.6 Imagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5.7 Métodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
5.8 Sessões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

1
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

6 DTML 30
6.1 DTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
6.2 TAG DTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
6.3 Inserindo Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
6.4 Adquirindo Conteúdo Dinamicamente . . . . . . . . . . . . . . . . . . . . . . . . . . 33
6.5 TAG Var . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
6.6 TAG If . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
6.7 Tags Else e Elif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
6.8 Tag In . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

7 Modelos de Páginas 38
7.1 Criando um Modelo de Página . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
7.2 Estruturas de Repetição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
7.3 Elementos Condicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
7.4 Mudando Atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

8 Aplicações Básicas 42
8.1 Construindo Aplicações com Pastas . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
8.2 Chamando Objetos em Pastas com URLs . . . . . . . . . . . . . . . . . . . . . . . . 42
8.3 O Objeto Especial index_html da Pasta . . . . . . . . . . . . . . . . . . . . . . . . . 43
8.4 Construindo um Website no Zope . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
8.5 Navegação do site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
8.6 Adicionando uma Página Inicial para o site . . . . . . . . . . . . . . . . . . . . . . . 44

9 Usuários e Segurança 46
9.1 Segurança . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
9.2 Autenticação e Gerenciamento de Usuários . . . . . . . . . . . . . . . . . . . . . . . 47

10 ZCatalog 51
10.1 ZCatalog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
10.2 Configurando Catálogos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

11 Banco de Dados 56
11.1 Banco de Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
11.2 Método Z SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

12 ZEO 63
12.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
12.2 ZEO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

13 Extendendo o Zope 67
13.1 Produtos no Zope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

2
Parte I

Sobre essa Apostila

3
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Conteúdo
O conteúdo dessa apostila é fruto da compilação de diversos materiais livres publicados na in-
ternet, disponíveis em diversos sites ou originalmente produzido no CDTC em http://www.cdtc.org.br.

O formato original deste material bem como sua atualização está disponível dentro da licença
GNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seção de
mesmo nome, tendo inclusive uma versão traduzida (não oficial).

A revisão e alteração vem sendo realizada pelo CDTC (suporte@cdtc.org.br) desde outubro
de 2006. Críticas e sugestões construtivas são bem-vindas a qualquer tempo.

Autores
A autoria deste é de responsabilidade de Cindya Katerine Pardo (cindya@cdtc.org.br) .

O texto original faz parte do projeto Centro de Difusão de Tecnologia e Conhecimento, que
vem sendo realizado pelo ITI (Instituto Nacional de Tecnologia da Informação) em conjunto com
outros parceiros institucionais, atuando em conjunto com as universidades federais brasileiras
que tem produzido e utilizado Software Livre, apoiando inclusive a comunidade Free Software
junto a outras entidades no país.

Informações adicionais podem ser obtidas através do email ouvidoria@cdtc.org.br, ou da


home page da entidade, através da URL http://www.cdtc.org.br.

Garantias
O material contido nesta apostila é isento de garantias e o seu uso é de inteira responsabi-
lidade do usuário/leitor. Os autores, bem como o ITI e seus parceiros, não se responsabilizam
direta ou indiretamente por qualquer prejuízo oriundo da utilização do material aqui contido.

Licença
Copyright ©2006, Instituto Nacional de Tecnologia da Informação (cdtc@iti.gov.br) .

Permission is granted to copy, distribute and/or modify this document under the terms
of the GNU Free Documentation License, Version 1.1 or any later version published by
the Free Software Foundation; with the Invariant Chapter being SOBRE ESSA APOS-
TILA. A copy of the license is included in the section entitled GNU Free Documentation
License.

4
Parte II

Informações Básicas

5
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Sobre o CDTC

Objetivo Geral

O Projeto CDTC visa a promoção e o desenvolvimento de ações que incentivem a dissemina-


ção de soluções que utilizem padrões abertos e não proprietários de tecnologia, em proveito do
desenvolvimento social, cultural, político, tecnológico e econômico da sociedade brasileira.

Objetivo Específico

Auxiliar o Governo Federal na implantação do plano nacional de software não-proprietário e


de código fonte aberto, identificando e mobilizando grupos de formadores de opinião dentre os
servidores públicos e agentes políticos da União Federal, estimulando e incentivando o mercado
nacional a adotar novos modelos de negócio da tecnologia da informação e de novos negócios
de comunicação com base em software não-proprietário e de código fonte aberto, oferecendo
treinamento específico para técnicos, profissionais de suporte e funcionários públicos usuários,
criando grupos de funcionários públicos que irão treinar outros funcionários públicos e atuar como
incentivadores e defensores de produtos de software não proprietários e código fonte aberto, ofe-
recendo conteúdo técnico on-line para serviços de suporte, ferramentas para desenvolvimento de
produtos de software não proprietários e de seu código fonte livre, articulando redes de terceiros
(dentro e fora do governo) fornecedoras de educação, pesquisa, desenvolvimento e teste de pro-
dutos de software livre.

Guia do aluno

Neste guia, você terá reunidas uma série de informações importantes para que você comece
seu curso. São elas:

• Licenças para cópia de material disponível

• Os 10 mandamentos do aluno de Educação a Distância

• Como participar dos foruns e da wikipédia

• Primeiros passos

É muito importante que você entre em contato com TODAS estas informações, seguindo o
roteiro acima.

Licença

Copyright ©2006, Instituto Nacional de Tecnologia da Informação (cdtc@iti.gov.br).

6
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos
da Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior
públicada pela Free Software Foundation; com o Capitulo Invariante SOBRE ESSA
APOSTILA. Uma cópia da licença está inclusa na seção entitulada "Licença de Docu-
mentação Livre GNU".

Os 10 mandamentos do aluno de educação online

• 1. Acesso à Internet: ter endereço eletrônico, um provedor e um equipamento adequado é


pré-requisito para a participação nos cursos a distância.

• 2. Habilidade e disposição para operar programas: ter conhecimentos básicos de Informá-


tica é necessário para poder executar as tarefas.

• 3. Vontade para aprender colaborativamente: interagir, ser participativo no ensino a distân-


cia conta muitos pontos, pois irá colaborar para o processo ensino-aprendizagem pessoal,
dos colegas e dos professores.

• 4. Comportamentos compatíveis com a etiqueta: mostrar-se interessado em conhecer seus


colegas de turma respeitando-os e fazendo ser respeitado pelo mesmo.

• 5. Organização pessoal: planejar e organizar tudo é fundamental para facilitar a sua revisão
e a sua recuperação de materiais.

• 6. Vontade para realizar as atividades no tempo correto: anotar todas as suas obrigações e
realizá-las em tempo real.

• 7. Curiosidade e abertura para inovações: aceitar novas idéias e inovar sempre.

• 8. Flexibilidade e adaptação: requisitos necessário à mudança tecnológica, aprendizagens


e descobertas.

• 9. Objetividade em sua comunicação: comunicar-se de forma clara, breve e transparente é


ponto - chave na comunicação pela Internet.

• 10. Responsabilidade: ser responsável por seu próprio aprendizado. O ambiente virtual não
controla a sua dedicação, mas reflete os resultados do seu esforço e da sua colaboração.

Como participar dos fóruns e Wikipédia

Você tem um problema e precisa de ajuda?

Podemos te ajudar de 2 formas:

A primeira é o uso dos fóruns de notícias e de dúvidas gerais que se distinguem pelo uso:

. O fórum de notícias tem por objetivo disponibilizar um meio de acesso rápido a informações
que sejam pertinentes ao curso (avisos, notícias). As mensagens postadas nele são enviadas a

7
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

todos participantes. Assim, se o monitor ou algum outro participante tiver uma informação que
interesse ao grupo, favor postá-la aqui.
Porém, se o que você deseja é resolver alguma dúvida ou discutir algum tópico específico do
curso. É recomendado que você faça uso do Forum de dúvidas gerais que lhe dá recursos mais
efetivos para esta prática.

. O fórum de dúvidas gerais tem por objetivo disponibilizar um meio fácil, rápido e interativo
para solucionar suas dúvidas e trocar experiências. As mensagens postadas nele são enviadas
a todos participantes do curso. Assim, fica muito mais fácil obter respostas, já que todos podem
ajudar.
Se você receber uma mensagem com algum tópico que saiba responder, não se preocupe com a
formalização ou a gramática. Responda! E não se esqueça de que antes de abrir um novo tópico
é recomendável ver se a sua pergunta já foi feita por outro participante.

A segunda forma se dá pelas Wikis:

. Uma wiki é uma página web que pode ser editada colaborativamente, ou seja, qualquer par-
ticipante pode inserir, editar, apagar textos. As versões antigas vão sendo arquivadas e podem
ser recuperadas a qualquer momento que um dos participantes o desejar. Assim, ela oferece um
ótimo suporte a processos de aprendizagem colaborativa. A maior wiki na web é o site "Wikipé-
dia", uma experiência grandiosa de construção de uma enciclopédia de forma colaborativa, por
pessoas de todas as partes do mundo. Acesse-a em português pelos links:

• Página principal da Wiki - http://pt.wikipedia.org/wiki/

Agradecemos antecipadamente a sua colaboração com a aprendizagem do grupo!

Primeiros Passos

Para uma melhor aprendizagem é recomendável que você siga os seguintes passos:

• Ler o Plano de Ensino e entender a que seu curso se dispõe a ensinar;

• Ler a Ambientação do Moodle para aprender a navegar neste ambiente e se utilizar das
ferramentas básicas do mesmo;

• Entrar nas lições seguindo a seqüência descrita no Plano de Ensino;

• Qualquer dúvida, reporte ao Fórum de Dúvidas Gerais.

Perfil do Tutor

Segue-se uma descrição do tutor ideal, baseada no feedback de alunos e de tutores.

O tutor ideal é um modelo de excelência: é consistente, justo e profissional nos respectivos


valores e atitudes, incentiva mas é honesto, imparcial, amável, positivo, respeitador, aceita as
idéias dos estudantes, é paciente, pessoal, tolerante, apreciativo, compreensivo e pronto a ajudar.

8
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

A classificação por um tutor desta natureza proporciona o melhor feedback possível, é crucial, e,
para a maior parte dos alunos, constitui o ponto central do processo de aprendizagem.’ Este tutor
ou instrutor:

• fornece explicações claras acerca do que ele espera, e do estilo de classificação que irá
utilizar;

• gosta que lhe façam perguntas adicionais;

• identifica as nossas falhas, mas corrige-as amavelmente’, diz um estudante, ’e explica por-
que motivo a classificação foi ou não foi atribuída’;

• tece comentários completos e construtivos, mas de forma agradável (em contraste com um
reparo de um estudante: ’os comentários deixam-nos com uma sensação de crítica, de
ameaça e de nervossismo’)

• dá uma ajuda complementar para encorajar um estudante em dificuldade;

• esclarece pontos que não foram entendidos, ou corretamente aprendidos anteriormente;

• ajuda o estudante a alcançar os seus objetivos;

• é flexível quando necessário;

• mostra um interesse genuíno em motivar os alunos (mesmo os principiantes e, por isso,


talvez numa fase menos interessante para o tutor);

• escreve todas as correções de forma legível e com um nível de pormenorização adequado;

• acima de tudo, devolve os trabalhos rapidamente;

9
Parte III

Zope

10
Capítulo 1

O que é o Zope

No curso Zope (significa: Z Object Publishing Environment) você aprenderá a trabalhar com
o framework de aplicações web. Uma aplicação web é um programa de computador no qual o
usuário acessa com um web browser na Internet.

11
Capítulo 2

Plano de ensino

2.1 Objetivo
Qualificar técnicos e programadores para trabalhar com o framework de aplicações web Zope.

2.2 Público Alvo


Técnicos e Programadores que desejam trabalhar com zope.

2.3 Pré-requisitos
Os usuários deverão ser, necessariamente, indicados por empresas públicas e ter conheci-
mento básico acerca da lógica de programação e programação em HTML.

2.4 Descrição
O curso de zope será realizado na modalidade EAD e utilizará a plataforma Moodle como
ferramenta de aprendizagem. Ele é composto de um módulo de aprendizado que será dado
na primeira semana e um módulo de avaliação que será dado na segunda semana. O material
didático estará disponível on-line de acordo com as datas pré-estabelecidas no calendário. A
versão utilizada para o Zope será o zope2.9.

2.5 Metodologia
O curso está dividido da seguinte maneira:

2.6 Cronograma
• Primeira semana - Introdução

• Segunda semana - Conceitos básicos

12
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

• Terceira semana - Conceitos avançados

As lições contém o contéudo principal. Elas poderão ser acessadas quantas vezes forem ne-
cessárias, desde que esteja dentro da semana programada. Ao final de uma lição, você receberá
uma nota de acordo com o seu desempenho. Responda com atenção às perguntas de cada lição,
pois elas serão consideradas na sua nota final. Caso sua nota numa determinada lição for menor
do que 6.0, sugerimos que você faça novamente esta lição.
Ao final do curso será disponibilizada a avaliação referente ao curso. Tanto as notas das lições
quanto a da avaliação serão consideradas para a nota final. Todos os módulos ficarão visíveis
para que possam ser consultados durante a avaliação final.
Aconselhamos a leitura da "Ambientação do Moodle"para que você conheça a plataforma de En-
sino a Distância, evitando dificuldades advindas do "desconhecimento"sobre a mesma.
Os instrutores estarão a sua disposição ao longo de todo curso. Qualquer dúvida deverá ser
enviada no fórum. Diariamente os monitores darão respostas e esclarecimentos.

2.7 Programa
O curso Zope oferecerá o seguinte conteúdo:

• Lição 1 - Introdução.

• Lição 2 - Interface de gerenciamento do Zope.

• Lição 3 - Trabalhando com objetos.

• Lição 4 - DTML.

• Lição 5 - Modelos de páginas.

• Lição 6 - Aplicações básicas.

• Lição 7 - Usuários e segurança.

• Lição 8 - ZCatalog.

• Lição 9 - Banco de dados.

• Lição 10 - ZEO.

• Lição 11 - Extendendo o Zope

• Avaliação Final

2.8 Avaliação
Toda a avaliação será feita on-line.
Aspectos a serem considerados na avaliação:

• Iniciativa e autonomia no processo de aprendizagem e de produção de conhecimento;

• Capacidade de pesquisa e abordagem criativa na solução dos problemas apresentados.

13
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Instrumentos de avaliação:

• Participação ativa nas atividades programadas.

• Avaliação ao final do curso.

• O participante fará várias avaliações referente ao conteúdo do curso. Para a aprovação e


obtenção do certificado o participante deverá obter nota final maior ou igual a 6.0 de acordo
com a fórmula abaixo:

• Nota Final = ((ML x 7) + (AF x 3)) / 10 = Média aritmética das lições

• AF = Avaliações

2.9 Bibliografia
• Site official: http://zope.org

• Guia em Português: http://www.tchezope.org/traducoes/lZ/

14
Capítulo 3

Introdução

3.1 Introdução ao Zope


O Zope foi desenvolvido pela empresa Digital Creations Inc (este era seu nome antigamente,
agora é Zope Corporation) em 1998, com o fim de ser um servidor de aplicações web que se
diferenciasse dos tradicionais ambientes de programação utilizados. Para obter este objetivo o
zope esta composto de três pacotes de software Open Source que suportam a publicação na
Web: Bobo, Document Template, e BoboPOS. Isto fez com que o Zope fornecesse o Web ORB
(Object Request Broker), a linguagem de scripting DTML e a base de dados orientada a objetos.

O Zope contém:

• Servidor web: Vem com um servidor embutido que envia conteúdo a você e seus usuários.
Caso você não queira utilizar o Zope como servidor web, ele permite trabalhar com outros
servidores web (a exemplo do apache e servidores que suportem interface (CGI)).

• Interface baseada na Web: Na construção de aplicações para a web com o Zope, usa-se
um web browser para interagir com a interface de gerenciamento do Zope (management
interface). Esta interface é um ambiente de desenvolvimento que o deixa fazer coisas como
criar páginas para a web, adicionar imagens e documentos, conectar-se a bancos de dados
relacionais externos e escrever scripts em diferentes linguagens.

• Banco de dados orientado a objetos: Zope trabalha com objetos que são armazenados
no banco de dados. A interface de gerenciamento do Zope oferece um modo simples,
familiar para administrar objetos que se assemelha à maneira que muitos gerenciadores de
arquivos trabalham.

• Integração Relacional: Caso não queira armazenar as informações no banco de dados ob-
jeto do Zope, você poderá utilizar outros bancos de dados relacionais como Oracle, MySQL,
etc, pois o Zope trabalhará com eles.

• Suporte a linguagem script: Zope permite escrever aplicações web em várias linguagens,
como Python, Perl, Document Template Markup Language (DTML - Linguagem de Marca-
ção para Modelos de Documentos) e ZPT (Zope Page templates).

No código do Zope encontramos aproximadamente como mínimo 85% do código do Zope es-
crito em Python; o resto é escrito em C++ (em aplicações que precisavam de maior performance).

15
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Finalmente, a licença utilizada pelo Zope é Zope Public License, que é uma licença Open Source
compatível com a GPL, a qual permite estudar e alterar o código fonte do zope.

3.2 Instalação
Neste curso utilizaremos o Zope 2.9. Para instalá-lo, entre no terminal como super usuário
(root) e digite:

#apt-get install zope

É necessário ainda adicionar o caminho dos binários do Zope ao $PATH: para isto edite o
arquivo /etc/profile, inserindo o diretório /usr/lib/zope2.9/bin à variável $PATH. A seguir, temos um
exemplo de um arquivo profile modificado:

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))


# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

if [ "`id -u`" -eq 0 ]; then


PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/lib/zope
else
PATH="/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/usr/lib/zope2.9/bin"
fi

if [ "$PS1" ]; then
if [ "$BASH" ]; then
PS1='\u@\h:\w \$ '
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi

export PATH

umask 022

Para que as mudanças surtam efeito de imediato, execute o seguinte comando:

# source /etc/profile

É necessário criar uma instância do Zope para poder entrar nele. Primeiramente crie uma
pasta zope (este nome pode ser mudado) no diretório /var:

# mkdir /var/zope

16
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Agora crie a instância com o seguinte comando:

# mkzopeinstance.py

Apareceram algumas informações necessárias que são diretório, nome de usuário e senha.
Digite o nome do diretório que você criou em nosso exemplo /var/zope. Digite o nome de
usuário que desejá em nosso exemplo usaremos admin. Digite a senha nos usaremos admin.
Pronto você criou a instância. Agora só falta iniciar o Zope:

# ./bin/zopectl start

Lembrando que para usar este comando você tem que estar dentro da pasta /var/zope.

17
Capítulo 4

Interface de Gerenciamento do Zope

4.1 Ingressando na interface


Para entrar na interface do zope é necessário que você tenha um browser que entenda códi-
gos HTML.
Aponte seu browser para a URL do administrador zope, para isto é necessário que você saiba
qual é a porta com a qual o zope esta rodando. Caso você não saiba o numero da porta entre no
arquivo de configuração do zope:

/var/zope# vi etc/zope.conf

Procure a variável HTTPPORT que em nosso exemplo tem o valor de 9673.


Agora na URL você pode colocar:

http://localhost:9673/ aqui entrará na interface do Zope.


Dirigisse no gerenciamento do zope pode faze-lo clicando sobre Zope Management Interface
ou pela URL http://localhost:9673/manage, aparecerá a seguinte janela:

18
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Imagem - 01

Antes de conseguir ingressar nesta URL, será pedida informações de nome de usuário e
sua respectiva senha, coloque a que criou na extensão. A interface de Gerenciamento do Zope
está separada em três quadros (frames). O frame da esquerda (navegador) permite navegar nas
pastas e subpastas do Zope que estão dentro da pasta Raiz que se encontra na parte superior.
No frame que se encontra acima do Navegador indica se você esta logado e como esta logado
por exemplo na figura acima: Logged in as admin, também são mostradas informações de login,
e um menu com as seguintes opções:

• Zope Quick Start ? tela de links rápidos para sites da comunidade do Zope;

• Set Preferences ? onde são encontradas opções de customização da ZMI que são usadas
como default; e

• Logout - clicando neste item o usuário será deslogado do Zope.

O terceiro frame é utilizado para gerenciar pastas e editar arquivos, é chamado de workspace
(área de trabalho).

Área de trabalho:
Aqui são mostrados os objetos que estão sendo gerenciados, apresentando as informações
do objeto e permitindo que sejam mudados.
No topo da tela existem várias abas. A aba que está selecionada no momento está em uma
cor mais clara. Cada aba leva a uma view (aba) diferente do objeto atual. Cada aba deixa que
você execute uma função diferente de gerenciamento naquele objeto.
Na imagem 01, você está olhando para a aba Contents (Conteúdos) do objeto da pasta da
raíz.
No topo da área de trabalho, abaixo das abas, há uma descrição do tipo de objeto atual e a
URL. Na esquerda há um ícone representando o tipo do objeto atual, e à direita dele está a URL
do objeto.
Folder at /: mostra que o objeto atual é um folder e que sua URL é /. Observe que esta
URL é a URL relativa do objeto para a URL de base do Zope. Assim se a URL ou o seu
site do Zope fossem http://mysite.example.com:9673, então a URL do "Folder at /myFolder"seria
http://mysite.example.com:9673/myfolder.
Como você explora diferentes objetos do Zope, você pode notar que as URLs (como mostrado
na tela de gerenciamento), podem ser usadas para navegar entre os objetos.

4.2 Contas de Usuários


O Zope é um sistema que permite logar em sua interface soportando diferentes tipos de
usuários, por esta razão dizemos que é um sistema multi-usuário.

• Emergency User (Usuário de Emergência): Esta conta é usada para criar outras contas de
usuários e consertar as coisas se você acidentalmente fica impedido de acessar. O usuário
de emergência só pode criar um tipo de objeto: Users (Usuários).

19
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

• Manager (Administrador): Este login é dos mais importantes, porque na realização da mai-
oria dos trabalhos no Zope você precisará estar logado como administrador. Também é
possivel criar varias contas de administrador, segundo a sua necessidade.
• Others (Outros): Você pode criar seus próprios tipos de usuários que se encaixam nos
grupos, ou são responsáveis por executar uma função que você definiu.

Criando Usuários

Imagem - 02

Para adicionar novos usuários clique na opção acl_users aparecerá a pasta de usuários (User
Folder) que contém objetos do usuário, clique na tecla add para adicionar um novo usuário e
digite os dados que são pedidos: Nome do novo usuário e a senha, por agora deixe a opção
Domains em branco (ver figura 02). Depois clique no botão Add para finalizar a adição de um
novo usuário. Em nosso exemplo criamos o usuário aluno.

4.3 Criando Objetos


Como foi visto quando criamos uma conta de usuário, se cria um objeto usuário na pasta
usuário. A interface de gerenciamento do Zope trabalha em termos de objetos e pastas.

20
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Para adicionar um novo objeto numa pasta, clique na barra de rolagem (chamada de adição
de produtos) que esta no canto superior direito da pagina, escolha a opção folder e clique no
botão Add.

Aparecerá a seguinte janela com suas respetivas opções:

Digite no campo Id "exem_folder"e no título "zope exem_folder". Então clique no botão Add.
Será criado uma nova pasta exem_folder na pasta atual. Para entrar na pasta criada clique sobre
ela. Zope criará um novo folder no folder atual. Você pode verificar isto observando que há um
novo folder chamado exem_folder dentro do diretório raíz.

É possível criar mais pastas ou folders dentro da nova pasta criada exem_folder.
Mover objetos:
Para mover objetos você pode utilizar o método de copiar (copy) ou recortar (cut) e colocalos
em o novo local desejado.
Crie uma nova pasta dentro da pasta exem_folder e selecione-a: agora você pode cortar ou
colar a pasta com os botões que se encontram na parte inferior da pagina (cut e copy); dirija-se
então ao local no qual você quer colocar a pasta que foi cortada ou copiada e aparecerá um botão
Paste; clique nele para colar a pasta em seu novo destino e finalizar o procedimento. Pronto, sua
pasta foi movida com sucesso. Também se pode mover muitos objetos ao mesmo tempo com um
só recorte ou cópia.
Pasta
As pastas podem conter objetos e outras pastas. Uma pasta dentro de outra gera uma árvore
de pastas, que da uma excelente estrutura a seu site. Uma boa estrutura é muito importante para
a apresentação e até segurança do site. Importar e Exportar:
As opções import e Export permitem mover objetos do Zope de um sistema para outro.

21
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Para exportar preencha o formulário:

• Digite o id do objeto;

• Escolhas as opções do menu Export to:

– o Download to local machine: seu browser estará pronto para fazer o download do
arquivo de exportação.
– o Save to file on server: o Zope salvará o arquivo na mesma máquina na qual o Zope
está rodando.
– o XML format: exporta-se o objeto no formato eXtensible Markup Language (XML).
Não selecionando esta caixa exportamos o arquivo no formato binário do Zope.

Depois de preencher o formulario clique no botão export, todos os arquivos exportados tem a
extensão .zexp.
Para importar um arquivo do servidor do zope, copie o arquivo de exportação no diretório
import do zope em seu servidor. Posteriormente vá para a tela Import/Export da pasta onde você
quer executar a importação. Entre com o nome do arquivo de exportação no campo Import File
name e clique no Import para importar esses objetos no Zope. Deixando a opção Take ownership
of imported objects selecionada por agora.

22
Capítulo 5

Trabalhando com Objetos

5.1 Modelos de Páginas do Zope


O Zope possui um poderoso objeto chamado Page Templates. Page templates permitem
definir a apresentação dinâmica para uma página da web escrevendo um modelo HTML. Uma
propriedade importante do Page templates é separar a lógica da apresentação.

Criando Modelos de Páginas do Zope

Crie um Folder na pasta raiz (como exemplo pode colocar criar_template, lembrando que
os nomes são escolhidos dependendo da sua necessidade). Clique na pasta criada e então
selecione Page Template da lista de adição. Aparecerá um formulário no qual o id e o título e
clique em Add. Pronto foi criado um page template.

Editando Modelos de Páginas:


Para editar um template clique sobre ele, e o levará à aba Edit do page template, que oferece
uma área de texto onde você pode editar o modelo em HTML. Clique Save para guardar as suas
modificações.

23
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

5.2 DTML
O DTML (Document) é utilizado para criar páginas web e seções de documentos, como uma
barra lateral que pode ser compartilhada por páginas web. Ele também pode conter comandos
de script em DTML (linguagem de script baseada em tags do Zope). A mistura de HTML e DTML
gera páginas dinâmicas para a web. Também serve para criar conteúdo compartilhado, como
estruturas de documentos comuns.

Criando Documentos DTML

Crie uma Pasta (criar_dtml) e selecione a opção DTML Document na janela de lista de adição.
Aparecerá o formulário de adição para o documento DTML. Preencha as opções id e title e clique
no botão Add. Pronto foi criado o documento DTML. Para editar clique sobre o documento DTML
e parecerá a janlela EDIT, depois salve as suas modificações clicando no botão save.
Os botões Taller, Shorter, Wider, e Narrower que se encontram na parte inferior da pagina,
permitem controlar o tamanho da área de texto. Para carregar um novo arquivo vá no campo file
e procure o arquivo que deseja carregar depois de um upload File, assim você carrega o arquivo.
Depois de ter salvo você acabara de ter usado o Zope para criar uma página HTML.
Visualizar Documentos DTML
Os documentos DTML podem ser vistos das seguintes formas:

• Interface de Gerenciamento: clique na aba View do Documento para ver o conteúdo do


documento.

• Chamando Diretamente Pela Web: Documentos podem ser chamados diretamente através
da web pela sua URL de localização através de um browser.

• Chamado por Outro Objeto: especialmente outro objeto DTML, podem exibir o conteúdo de
um Documento.

Observação: Todos os objetos do Zope, podem ser chamadas por sua URL. Por exemplo se
você tem um documento DTML na pasta raiz chamado new_dtml, então sua URL deveria ser:

24
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

http://localhost:9673/new_dtml
Se new_dtml se encontra dentro da pasta criar_dtml, então seu URL será:
http://localhost:9673/criar_dtml/new_dtml
Chamando por Outro Objeto
Ao usar o Zope você provavelmente já encontrou exemplos de DTML como este:

<dtml-var standard_html_header>

<h1>This is some simple HTML</h1>

<dtml-var standard_html_footer>

Aqui nós vimos que um objeto DTML,

standard\html\_header
está sendo chamado pelo documento que contém este código. Neste caso, os conteúdos proces-
sados do primeiro documento são inseridos dentro dos conteúdos deste documento chamado.
Este é um conceito fundamental no Zope e será usado ao longo do curso.

5.3 History de documentos

Para ver o histórico de um documento você tem que clicar sobre o documento que deseja, por
exemplo clique sobre o documento DTML que foi criado anteriormente. Pode ver que na parte
superior da pagina se encontra a aba history. Aqui você encontrará as datas das modificações do
documento que contem uma copia do documento com sua respectiva modificação. Esta opção
é muito importante, para efetuar revisões no objeto, pois pode ser de interesse ver quem fez e
quando foi feita a mudança de um objeto.
History permite efetuar comparação de história para comparar a mais recente "nova"versão do
arquivo com a próxima versão mais recente. Esta comparação é exibida em um formato popular
chamado diff. O diff mostra as linhas que foram acrescentadas ao novo documento (através de
um "+"), que linhas foram subtraídas do documento antigo (através de um -"), e quais linhas foram
substituídas ou foram mudadas (através de um "!").

5.4 FTP, WebDAV e PUT


O Zope permite editar documentos diretamente em seu browser, entretanto essa não é a
única maneira que os documentos podem ser editados no Zope. Para documentos simples,

25
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

a edição através da web é um método cômodo. Mas para documentos grandes, complexos, ou
documentos que têm formatação especial, é útil poder usar o editor que você já está acostumado.
Documentos DTML podem ser editados com FTP, WebDAV, e o protocolo HTTP PUT. Muitos
editores de HTML e de texto suportam estes protocolos para edição de documentos em servido-
res remotos. Cada um destes protocolos tem vantagens e desvantagens:
FTP: é o Protocolo de Transferência de Arquivo, utilizado para transferir um arquivo de um
computador para outro. Muitos editores de texto suportam FTP, por isso ele é muito útil.
WebDAV: é um novo protocolo da internet baseado no protocolo fundamental da Web, HTTP.
Por ser novo, não é suportado por tantos editores de texto quanto o FTP.
PUT: O protocolo HTTP suporta um modo simples de atualizar conteúdos de um servidor
chamado PUT. PUT é suportado por muitos editores de HTML, como o Netscape Composer.

5.5 Arquivos
Documentos como softwares, áudio, vídeo e documentos são transportados pela Internet e
pelo mundo como arquivos. Você pode usar arquivos para organizar qualquer tipo de informação
que o Zope especificamente não suporta, como arquivos Flash, applets, tarballs, etc.
Arquivos não consideram seus conteúdos para serem de qualquer formato em especial, tex-
tual ou outro. Arquivos são bons para organizar qualquer tipo de conteúdo binário que seja
apenas informação de computador de algum tipo. Os arquivos também são bons para organizar
conteúdo textual que não necessite de script DTML.
Todo objeto Arquivo tem um tipo de conteúdo particular que é uma Internet MIME, padrão
designação para tipo de arquivo. Quando você atualiza um arquivo no Zope, este tenta julgar o
tipo de conteúdo do nome do arquivo, mas o Zope nem sempre julga corretamente.
Para criar um arquivo escolha a opção File, aparecerá um formulário; preencha-o e selecione
o arquivo que deseja, depois clique no botão Upload.

Atualizando Arquivos

Como DTML Methods e Documents, Arquivos permitem atualizar um arquivo de seu compu-
tador quando você criar um objeto novo. Clique o botão Browse para escolher um arquivo de
seu computador local quando estiver criando um novo File do Zope. Tente escolher um arquivo
como um arquivo Word (.doc) ou um arquivo Portável Document Format (.pdf). Observe, quando
atualizar um arquivo com seu browser, você pode ter que indicar o tipo de arquivo que você está
procurando na caixa de diálogo de atualização do seu browser. Depois de selecionar um arquivo
para atualizar, clique Add. Esta atualização pode levar alguns minutos.
Para ver que tipo de arquivo o zope adivinhou que era; clique sobre o novo arquivo e dirija-se
à aba Edit. Quando o zope não logra reconhecer o tipo de arquivo ele escolhe um default o tipo
genérico do conteúdo application/octet-fluxo.
Você pode mudar os conteúdos de um Arquivo existente indo para a aba Upload. Aqui você
pode substituir os conteúdos do Arquivo por um arquivo novo. Se você não preencher o id e o title
deste formulário e você atualizar um arquivo, o Zope usará o filename do id e o title do objeto.

26
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Editando Arquivos

Se seu arquivo contém texto e é menor que 64K, então o Zope deixa você editá-lo na inter-
face de gerenciamento. Um arquivo texto é aquele que tem um tipo conteúdo que começa com
text/, como text/html, ou text/plain. Você pode algumas vezes achar conveniente editar arquivos
de texto na interface de gerenciamento. De qualquer forma, você pode sempre editar arquivos
localmente e depois atualizá-los no Zope.

Visualizando Arquivos

Você pode visualizar um arquivo indo para a aba View da interface de gerenciamento. Você
também pode ver um Arquivo visitando sua URL. Na realidade a aba View é apenas uma maneira
de chegar à URL do Arquivo pela interface de gerenciamento do Zope.

5.6 Imagens
O Zope trabalha as imagens como objetos arquivos e têm a mesma interface de gerencia-
mento dos arquivos, mas com alguns extras devido a seu conteúdo gráfico.
Colocando uma imagem

Para pôr uma figura na página da web, precisa usar a tag HTML IMG. Suponha que você tem
um objeto Imagem em seu diretório raiz chamado logo se você não tiver nenhuma imagem no
diretório raiz, vá na janela de opções e escolha a opção Image, aparecerá o local a onde você
poderá escolher a imagem e adicioná-la no diretório raiz; não esqueça de colocar o id e o título.
Agora pode abrir seu documento criado dtml que em nosso exemplo se chama new_dtml e
em ele insira o seguinte HTML: com uma tag IMG :

<dtml-var standard_html_header>
<img src="logo">
<h1>Bem-vindo!</h1>
<dtml-var standard_html_footer>

27
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Neste exemplo, você referencia a imagem do logo criando uma tag HTML IMG, mas normal-
mente isto não é necessário para criar sua própria tag IMG para exibir imagens. Objetos Imagem
sabem como gerar suas próprias tags HTML. Quando você insere um objeto Imagem no DTML,
isto gera uma tag IMG para ela.
Para visualizar a imagem colocada, salve as mudanças e vá na aba view, ali você poderá ver
a imagem na sua pagina.
Casso queira que a imagem seja vista em toda página no canto superior esquerdo, então
coloque uma referência ao logo no método standard_html_header:

<html>
<body>
<dtml-var logo>

Agora, veja o diretório raiz dando um clique na aba View. Se você olhar para o fonte da página
da web que o Zope cria, você pode ver que o código DTML transformou-se para você em uma
tag HTML IMG:

<html>
<body>
<img src="logo" width="50" height="30">

Quando você cria um objeto arquivo, você só precisa entrar no modo de edição dele e in-
serir a imagem selecionada através da opção FILE DATA. Salve as mudanças e vá na aba
view. Você verá que aparece a imagem que selecionou. Você pode acessar suas imagens
do Zope de outros servidores web. Suponha que você tem uma Imagem do Zope cuja URL é
http://imageserver:9673/imagens/logo.jpg. Você pode incluir esta Imagem em qualquer página da
web servida de qualquer servidor da web usando a URL absoluta da Imagem em sua página da
web:

<html>
<h1>Remote Image</h1>
<img src="http://imageserver:9673/imagens/logo.jpg">
</html>

Este exemplo mostra como você pode usar dados do Zope de fora do Zope.

28
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

5.7 Métodos
Métodos são objetos no Zope que armazenam conteúdos executáveis especiais. O nome
"Method"é realmente usado impropriamente, e seu uso no Zope está sendo aos poucos substi-
tuído por termos mais comuns como Scripts e Templates.
Zope vem com dois tipos de métodos, DTML Methods e Z SQL Methods. DTML Methods são
usados para definir modelos de apresentação que você pode aplicar a objetos de conteúdo como
DTML Documents e Files (Arquivos). Um modo muito comum e popular para usar DTML Methods
é definir um layout de apresentação separado de seu conteúdo.
SQL Methods são usados para conter consultas do banco de dados que você pode reutilizar
em toda sua aplicação web. Conectividade com Banco de dados Relacional, onde um exemplo
de criação de uma aplicação para a web usando um banco de dados relacional é dado.
Todos os vários objetos no Zope podem ser manipulados chamando métodos nesses objetos.
Por exemplo, objetos Folder têm um método objectValues que retorna os objetos contidos no
Folder. DTML Methods podem ser usados para escrever simples scripts que chamam estes
métodos API do Zope.
Um exemplo simples do uso de DTML Methods é criar um DTML Method no folder raiz cha-
mado objectList:

<dtml-var standard_html_header>
<ul>
<dtml-in objectValues>
<li><dtml-var getId></li>
</dtml-in>
</ul>
<dtml-var standard_html_footer>
Quando você visualizar este método, ele chamará o método objectValues no folder raiz e será
mostrado uma lista simples em HTML de todos os objetos no folder raiz.
Todas as pastas implementam o método objectValues. O método de objectValues é parte de
uma interface que todos os implementos dos folders chamam ObjectManager.
Além de chamar métodos API em objetos, os DTML Methods podem também ser usados de
um certo modo para estender qualquer objeto do Zope. Isto será explicado com mais detalhes no
próximo capítulo. Em efeito, isto lhe permite estender o Zope API simplesmente criando DTML
Methods.
Você apenas viu o método objectList, que está no folder raiz que faz uma lista simples dos
conteúdos do folder raiz. Pelo fato do método estar no folder raiz, ele é usado agora por qualquer
objeto que está na raiz ou abaixo do folder raiz. Este método estende o Zope API para estes
objetos considerando que lhes proporciona outro método de chamada.
DTML Methods servem principalmente como modelos de apresentação. DTML Methods po-
dem agir como modelos (templates) que enlaçam pedaços reutilizáveis de conteúdo em páginas
dinâmicas para a web.

Diferencia entre DTML Cocuments e DTML Methods

29
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

DTML Documents: são requeridos para armazenar documentos como conteúdo. Por exem-
plo, os vários capítulos de um livro podem ser armazenados em um DTML Document. Uma regra
geral é: se seu conteúdo é principalmente documento e você quer apresentá-lo em seu site, en-
tão ele deveria entrar em um DTML Document.

DTML Methods: são requeridos para manipular outros objetos. DTML Methods não armaze-
nam muito conteúdo, a menos que o conteúdo seja necessário para mudar ou manipular outros
Conteúdos.

5.8 Sessões
Sessões permitem a você manter o rastro dos visitantes de seu site, permitindo que você
tenha informações como: quantas pessoas visitaram uma determinada pagina do site ou o próprio
site e sobre que ítens o usuário pode ter colocado.
Browsers web usam um protocolo chamado HTTP para trocar dados com um servidor tal como
o Zope. HTTP não oferece uma forma do servidor manter o rastro de um pedido do usuário; cada
pedido é considerado completamente independente.

Tipos diferentes de objetos para gerenciar dados de sessão:

• Browser ID Manager: Este objeto gerencia como os browsers do visitante são identificados
de pedido a pedido, e permite que você configure se isto acontece via cookies ou variáveis
de formulário, ou via uma combinação entre ambos.A configuração de seção default oferece
um Browser Id Manager como o objeto /browser_id_manager.

• Transient Object Container: Este objeto contém dados de seção. Ele permite que você
sete quantos dados de seção permanecem depois que ele expira. A configuração default
da seção oferece um Transient Object Container chamado /tempa_folder/session_data. Os
objetos de dados de seção no Transient Objectcontainer session_data default são perdidos
cada vez que o Zope é reiniciado.

• Session Data Manager: Este objeto conecta-se ao id do browser e informação de dados


de seção. Quando uma pasta que contém um gerenciador de dados da seção é cru-
zada, o objeto REQUEST é preenchido com a SESSION, que é um objeto de dado da
seção. A configuração default da seção oferece um Session Data Manager chamado /ses-
sion_data_manager.

Observação:
Para efetuar rastros nos usuários você precisara utilizar um script.

30
Capítulo 6

DTML

6.1 DTML
Document Template Markup Language (DTML) é uma linguagem script de servidor, como
PHP, ASP,etc, que dinamicamente controla e formata o conteúdo (DTML é muito utilizado para
criar interfaces dinâmicas para web). Os comandos DTML são executados pelo Zope no servidor,
e o resultado daquela execução é enviada para seu browser. Você pode usar scripts de dois tipos
de objetos no Zope: DTML Documents e DTML Methods.
Uma das vantagens do DTML é que ele se parece muito com o HTML; pessoas familiarizadas
com HTML têm facilidade em aprender o DTML. Ele também suporta reutilização de conteúdo e
layout, formata de dados heterogêneos, e separa a apresentação da lógica e do conteúdo.
Um exemplo claro do reuso de layout são o cabeçalho e rodapé default do Zope, veja o código
abaixo:

<dtml-var standard_html_header>

<p>Hello world.</p>

<dtml-var standard_html_footer>

Nesse código temos HTML e DTML juntos, separando:

<dtml-var standard_html_header>

é o DTML que chama um objeto default do Zope que se encontra na raiz do Zope, não importa
aonde esteja sua página, o Zope encontrará o objeto de nome ’standard_html_header’ e renderiza
o código desse objeto no contexto do objeto que chama o ’standard_html_header’.

<p>Hello world.</p>

é o HTML do conteúdo

<dtml-var standard_html_footer>

replica a funcionalidade do header no footer através de DTML.

31
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Está página renderizada no browser ficaria assim:

<html>

<body bgcolor="#FFFFFF">

<p>Hello world.</p>

<hr>

<p>Last modified 2000/10/16 by AmosL</p>

</body>

</html>

Além do reuso do código, é possível formatar todos os tipos de dados, para chamar métodos,
pesquisas a banco de dados, inserir objetos no Zope, processar formulários, e mais.

6.2 TAG DTML


DTML é uma linguagem de marcação baseada em tag. Em outras palavras DTML usa tags
para fazer seu trabalho. Aqui temos um simples fragmento de DTML:

<dtml-var standard_html_header>
<h1>Hello World!</h1>
<dtml-var standard_html_footer>

Este código DTML contém duas tags var da DTML e algum HTML. As tags h1 são HTML,
não DTML. Você geralmente mistura a DTML com outra linguagem de marcação como o HTML.
Normalmente a DTML é usada para gerar HTML, mas não há nada segurando você para gerar
outros tipos de texto.

DTML Contém dois tipos de tags:

• tags simples: consistem de uma tag entre símbolos de menor que (<) e maior que (>).
symbols. Exemplo: <dtml-var parrot>

• Tags blocos: consistem de duas tags, uma que abre o bloco e outra que fecha o bloco, e o
conteúdo que vai entre elas:

<dtml-in mySequence>
<!-- this is an HTML comment inside the in tag block -->
</dtml-in>

32
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

A tag de abertura começa o bloco e a tag de fechamento termina-a. A tag de fechamento tem
o mesmo nome da tag de abertura precedida de uma linha. Esta é a mesma convenção que o
HTML e XML usam.

6.3 Inserindo Variáveis


Inserir uma variável é a tarefa mais básica que você pode executar com a DTML. Suponha
que você tem um folder cujo id é Feedbags que tem o title (título) "Bob’s Fancy Feedbags". Dentro
do folder crie um DTML Method com o id pricelist. Então mude o conteúdo do DTML Method para
o seguinte:

<dtml-var standard_html_header>
<h1>Price list for <dtml-var title></h1>
<p>Hemp Bag $2.50</p>
<p>Silk Bag $5.00</p>
<dtml-var standard_html_footer>

Agora visualize o DTML Method clicando na aba View. Você deveria ver uma página HTML
cujo código se parece com isto:

<html>
<body>
<h1>Price list for Bob's Fancy Feedbags</h1>
<p>Hemp Bag $2.50</p>
<p>Silk Bag $5.00</p>
</body>
</html>

Isto é o que você deveria basicamente esperar. O Zope insere um cabeçalho, um rodapé, e um
título na página da web. A DTML obtém os valores destas variáveis de vários lugares diferentes.
Primeiro, a tag var tenta achar uma variável no objeto corrente. Então ela olha no repositório do
objeto corrente. Então ela olha no pedido da web (formulários e cookies). Se o Zope não pode
achar uma variável então ele cria uma exceção, e ele pára de executar a DTML.
Vamos seguir passo a passo este código DTML para ver onde as variáveis são encontradas.
Primeiro o Zope olha para o standard_html_header no objeto corrente, que é o DTML Method
pricelist. Depois, Zope olha para o cabeçalho no repositório do objeto corrente. O folder Feed-
bags não tem nenhum método ou propriedade ou sub-objetos com aquele nome. Depois o Zope
examina o repositório do folder Feedbags, e assim por diante até que ele obtenha do folder raiz.
O folder raiz tem um sub-objeto chamado standard_html_header. O objeto cabeçalho é um DTML
Method. Assim o Zope chama o método cabeçalho e insere os resultados.
Depois o Zope olha para a variável title. Aqui, a pesquisa é um pouco pequena. Primeiro, ele
olha no DTML Method pricelist, que não tem um título, assim o Zope foi adiante e achou o título
do folder Feedbags e inseriu-o.
Finalmente o Zope olha para a variável standard_html_footer. Ele tem que pesquisar todo o
caminho acima até o folder raiz para achá-lo, somente ai que ele olha para standard_html_header.

33
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Observação: Nos casos que você precisá criar variáveis ou trabalhar com processamento
de string, não é recomendável usar o DTML. Para isto utilize linguagens de programação como
Python e Perl.

6.4 Adquirindo Conteúdo Dinamicamente


O Zope procura as variáveis da DTML no repositório do objeto corrente se ele não encontra
a variável primeiro no objeto corrente. O Zope usa o termo aquisição para se referir a este uso
dinâmico de conteúdo e comportamento.
É muito importante saber onde você coloca os objetos para procurá-los depois.
Um exemplo de aquisição que você já viu é como as páginas da web usam os cabeçalhos e
rodapés padrão. Para adquirir o cabeçalho padrão apenas peça ao Zope par inserí-lo com a tag
var:
<dtml-var standard_html_header>
Não importa onde seu DTML Method ou Document está localizado. O Zope irá procurar para
cima até encontrar o standard_html_header que é definido no folder raiz.
Você pode levar vantagem na maneira como o Zope procura as variáveis para adaptar seu
cabeçalho em diferentes partes de seu site. Apenas crie um novo standard_html_header em um
folder e ele irá se impor ao cabeçalho global em todas as páginas web em seu folder e abaixo
dele.
Crie um folder no folder raiz com um id Green. Entre no folder Green e crie um DTML Docu-
ment com um id welcome. Edite o documento welcome para ter este conteúdo:

<dtml-var standard_html_header>
<p>Welcome</p>
<dtml-var standard_html_footer>

Agora visualize o documento welcome. Ele deveria se parecer como uma simples página web
com a palavra welcome.
Agora vamos adaptar o cabeçalho para o folder Green. Crie um DTML Method no folder Green
com o id standard_html_header. Então edite o conteúdo do cabeçalho para o seguinte:

<html>
<head>
<style type="text/css">
body {color: #00FF00;}
p {font-family: sans-serif;}
</style>
</head>
<body>

Observe que esta não é uma página web completa. Este é apenas um fragmento do HTML
que pode ser usado como um cabeçalho. Este cabeçalho usa CSS (Cascading Style Sheets)
para fazer algumas mudanças ao layout da sua página web. Agora volte ao documento welcome
e visualize-o novamente.
Você pode continuar este processo de substituir conteúdo padrão criando outro folder dentro
do folder Green e criando um DTML Method standard_html_header aqui. Agora as páginas no
sub-folder usarão seus cabeçalhos padrão ao invés do cabeçalho do folder Green. Usando este

34
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

padrão você pode mudar rapidamente o layout de diferentes partes do seu site. Se você decidir
mais tarde que uma área do site precisa de um cabeçalho diferente, apenas crie um. Você não
tem que mudar a DTML em nenhuma das páginas; elas automaticamente acharão o cabeçalho
mais perto e usá-lo.

6.5 TAG Var


A tag var insere variáveis em DTML Methods e Documents. Como você já viu, a tag var
procura variáveis primeiro no objeto corrente, depois em seu repositório e finalmente no request
da web.
A tag var pode também usar expressões do Python para oferecer mais controle na localização
e chamada das variáveis.
Atributos da Tag Var
Você pode controlar o comportamento da tag var usando seus atributos. A tag var tem muitos
atributos que ajudam você em situações comuns de fomatação. Alguns atributos:
html_quote
Este atributo faz com que os valores inseridos sejam postos entre aspas. Isto significa que <,
> e & são aproveitados.
missing
O atributo missing lhe permite especificar um valor padrão para usar no caso do Zope não
poder achar a variável. Por exemplo:
<dtml-var bananas missing="We have no bananas»
fmt
O atributo fmt lhe permite controlar o formato da saída das tags var.
Sintaxe de Entidade da Tag Var
Zope oferece uma sintaxe suscinta da DTML apenas para a simples tag var. Porque a tag var
é um acontecimento singular, ela pode ser representada com uma entidade HTML com a sintaxe:
&dtml-cockatiel;
Isto equivale a:
<dtml-var name="cockatiel"html_quote>
A principal razão em usar a sintaxe de entidade é permitir a colocação de tags DTML dentro
de tags HTML. Por exemplo, ao invés de escrever:
<input type="text"value=«dtml-var name="defaultValue»»
Você pode usar a sintaxe de entidade para fazer coisas mais legíveis para você e seu editor
de texto:
<input type="text"value="&dtml-defaultValue;»
A sintaxe de entidade da tag var é muito limitada. Você não pode usar expressões do Python
e alguns atributos da tag com ela.

6.6 TAG If
Tag if deixa você avaliar uma condição e transmitir diferentes ações baseadas no resultado.

35
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Exemplo:

objectValues
Verdadeiro se a variável objectValues existe e é verdadeira. Isto é, quando o processo de
achar e passar objectValues não for 0, None, uma sequência vazia, ou uma string vazia.
Com a tag var, você pode usar ambas as sintaxe do name quanto da expression. Aqui estão
algumas condições ditas como expressões DTML.
expr="1"
Sempre verdadeiro.
expr="rhino"
Verdadeiro se a variável rhino for verdadeira.
expr="x < 5"
Verdadeiro se x for menor que 5.
expr="objectValues(File)"
Verdadeiro se chamando o método objectValues com um argumento de File é retornado um
valor verdadeiro. Este método é explicado com mais detalhes neste capítulo.
A tag if é uma tag com bloco. O bloco dentro da tag if é executado se a condição for verdadeira.
Aqui temos como você poderia usar uma expressão da variável com a tag if para testar uma
condição:

<p>How many monkeys are there?</p>


<dtml-if expr="monkeys > monkey_limit">
<p>There are too many monkeys!</p>
</dtml-if>

No exemplo acima, se a expressão em Python monkeys > monkey_limit for verdadeira quando
você então verá o primeiro e o segundo parágrafos do HTML. Se a condição for falsa, você verá
somente o primeiro.
Tags if podem ser postas em qualquer profundidade, por exemplo, você pode ter:

<p>Are there too many blue monkeys?</p>


<dtml-if "monkeys.color == 'blue'">
<dtml-if expr="monkeys > monkey_limit">
<p>There are too many blue monkeys!</p>
</dtml-if>
</dtml-if>

Tags if dentro de outras trabalham com a avaliação da primeira condição, e se aquela condição
for verdadeira, então a segunda é avaliada. Em geral, tags DTML if trabalham como Python se
forem expressões. Sintaxe de Nomes e Expressões
A sintaxe do name verifica a existência de um nome, bem como seu valor. Por exemplo:

<dtml-if monkey_house>
<p>There <em>is</em> a monkey house Mom!</p>
</dtml-if>

Se a variável monkey_house não existe, então esta condição é falsa. Se há uma variável
monkey_house mas ela é falsa, então esta condição também é falsa. A condição só é verdadeira

36
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

se houver uma variável monkey_house e ela não for 0, None, uma sequência vazia ou uma string
vazia.
A sintaxe da expressão em Python não verifica a existência da variável. Isto é porque a
expressão deve ser válida em Python. Por exemplo:

<dtml-if expr="monkey_house">
<p>There <em>is</em> a monkey house, Mom!</p>
</dtml-if>

Isto funcionará como esperado assim que monkey_house existir. Se a variável monkey_house
não existe, o Zope imprimirá uma excessão KeyError quando ele tentar achar a variável.

6.7 Tags Else e Elif


A tag if somente realiza algo se a condição for verdadeira. Você poderia querer uma ação
diferente se a condição fosse falsa. Isto pode ser feito com a tag else do DTML. O bloco if pode
também conter uma tag simples else. Por exemplo:

<dtml-if expr="monkeys > monkey_limit">


<p>There are too many monkeys!</p>
<dtml-else>
<p>The monkeys are happy!</p>
</dtml-if>

A tag else divide o bloco da tag if em dois blocos, o primeiro é executado se a condição for
verdadeira, o segundo é executado se a condição não for verdadeira.
Um bloco da tag if pode também conter uma tag simples elif. A tag elif especifica outra
condição apenas como uma tag if de adição. Isto faz com que você possa especificar múltiplas
condições em um bloco:

<dtml-if expr="monkeys > monkey_limit">


<p>There are too many monkeys!</p>
<dtml-elif expr="monkeys < minimum_monkeys">
<p>There aren't enough monkeys!</p>
<dtml-else>
<p>There are just enough monkeys.</p>
</dtml-if>

Um bloco da tag if pode conter várias tags elif mas somente uma tag else. A tag else sempre
deve vir deppois das tags elif. Tags elif podem testar condições usando tanto a sintaxe nome
quanto a sintaxe expressão.

6.8 Tag In
A tag in DTML interage em uma sequência de objetos, conduzindo um bloco de execução para
cada item na sequência. Na programação, isto é frequentemente chamado interação, ou looping.
A tag in é uma tag de bloco como a tag if. O conteúdo do bloco da tag in é executado uma vez
para cada interação no loop da tag in. Por exemplo:

37
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

<dtml-in todo_list>
<p><dtml-var description></p>
</dtml-in>

Este exemplo faz um loop sobre uma lista de objetos chamada todo_list. Para cada item, ela
insere um parágrafo em HTML com uma descrição do item.
Iteração é muito útil em muitas tarefas para a web. Considere que um site mostre casas
para vender. Usuários vão procurar em seu site por casas que se adaptem a certos critérios.
Você vai querer formatar todos estes resultados de uma forma consistente na página, então, você
precisará interagir sobre cada resultado e criar um bloco HTML para cada resultado.
De certa forma, os conteúdos de um bloco da tag in são um tipo de template que é aplicado
uma vez para cada item em uma sequência.
Variáveis Especiais
A tag in oferece a você alguma indormação útil que lhe deixa adaptar seu HTML enquanto
você estiver interagindo sobre uma sequência. Existem muitas variáveis especiais que a tag in
define para você. Aqui estão as mais comuns e úties:
sequence-item
Esta variável especial é o item corrente na interação.
sequence-index
o número corrente, começando do 0, de interações completadas. Se este número é even,
sequence-even é verdadeiro e sequence-odd é falso.
sequence-number
O número corrente, começando do 1, de interações completadas. Pode ser como uma posição
cardinal (primeiro, segundo, terceiro, etc.) de objetos correntes no loop. Se este número é even,
sequence-even é falso e sequence-odd é verdadeiro.
sequence-start
Esta variável é verdadeira para a primeira interação.
sequence-end
Esta variável é verdadeira para a última interação.
DTML é uma poderosa ferramenta para criação de conteúdo dinâmico. Ela lhe permite exe-
cutar corretamente cálculos complexos.

38
Capítulo 7

Modelos de Páginas

7.1 Criando um Modelo de Página


Use seu web browser para logar dentro Zope Management Interface - ZMI - como um gerente.
Escolha um Folder para inserir (pode ser na pasta root) e escolha "Page Template"na lista de
adição do drop-down (janela de escolha). Selecione "simple_page"no campo ld do formulário de
adição, então pressione o botão "Add and Edit".
Você deveria agora ver a página de edição principal para o novo modelo de página. O título
está em branco, o content-type é text/html, e o modelo de texto por definição é uma área de
edição.
Agora criaremos uma página dinâmica simples. Selecione a palavra "Simple Page"no campo
Title. Então, o editor do modelo de página terá esta aparência:

<html>
<body>
<p>
This is <b tal:replace="template/title">the Title</b>.
</p>
</body>
</html>

Agora pressione o botão Save Changes. O Zope deveria mostrar uma mensagem confirmando
que suas mudanças foram salvas.
Clique na tab Test. Você verá uma página com, "This is a Simple Page."no topo. Note que o
texto é simples.
Depois disto, click no link Browse HTML source abaixo do campo content-type. Isto mostrará
para você a origem não-renderizada do modelo. Você deverá ver, "This is the Title."Apos isto,
você estará preparado para editar o modelo mais tarde.
O campo Content-Type permitira a você especificar o tipo de conteúdo da sua página. Geral-
mente você usará o tipo de conteúdo text/html para HTML ou text/xml para XML.
Se você escolher o tipo text/html então o Zope analisará a compatibilidade do seu modelo
com o modo de marcação HTML. Se você escolher qualquer outro tipo de conteúdo que não seja
o text/html o Zope supõe que o modelo seja XML. Além disso o Zope requer um nome TAL e
METAL XML declaração para o formato XML.
Expressões Simples

39
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

A expressão, "template/title’ é um caminho do Modelo de Página. Este é um dos mais comuns


tipo de expressão. Existem vários outros tipos de expressões definidos pelo padrão da Sintaxe
de Expressão TAL (TALES).
O "template/title"produz um title proprietário do modelo. Nele há algumas expressões comuns.

• request/URL: A URL da requisição de pedido corrente.


• user/getUserName: A autentificação do login de usuário.
• container/objectIds: A lista de Ids de objetos da mesma pasta do modelo.

Todos os caminhos começarão com um nome de variável. Se a variável contiver o nome que
você quer, pare. Senão, adicione uma barra (´/´) ao nome do sub-objeto ou propriedade.
Inserindo Texto
No modelo "simple_page", você usará uma instrução tal:replace ligada a um caractere des-
tacado. Quando você testar isto, o Zope colocará um caracter completo como título do modelo.
Apesar do seu código de origem, você verá um modelo de texto destacado. Nós usamos um outro
caracter destacado para sublinhar algo diferente.
Para colocar uma parte dinamica de um texto em outro texto, você usa tal:replace ou um
caracter span, de preferência o mesmo caracter destacado. Por exemplo, adicionar depois de
umas linhas o exemplo:
<br> The URL is <span tal:replace="request/URL»URL</span>.
O tag span é estrutural, não visual, assim você somente verá que "The URL is URL."quando
você abrir o código em um editor ou browser. Quando você ver a versão pronta, talvez seja
possível ver isto:
<br> The URL is http://localhost:8080/simple_page.
Se você precisar inserir um caracter no text mas largar ele sozinho, você usará a instrução
tal:content. Para agrupar o título do exemplo de página ao título do modelo proprietário, acres-
cente as linhas a seguir no meio do codigo html e o caracter body:

<head>
<title tal:content="template/title">The Title</title>
</head>

Se você abrir o indicador "Test"em um novo browser, ele terá como título "a Simple Page". Se
você olhar o código da página verá alguma coisa assim:

<html>
<head>
<title>a Simple Page</title>
</head>
...

O Zope inseriu ao título de seu modelo o caracter title.

7.2 Estruturas de Repetição


Agora vamos adicionar alguns contextos a suas páginas, da forma de listas de objetos na
mesma pasta do modelo. Você criará uma tabela que terá numerado linhas para cada objeto e
colunas para id, meta-type e títulos. Adicione estas linhas ao seu exemplo:

40
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

<table border="1" width="100%">


<tr>
<th>Number</th>
<th>Id</th>
<th>Meta-Type</th>
<th>Title</th>
</tr>
<tr tal:repeat="item container/objectValues">
<td tal:content="repeat/item/number">#</td>
<td tal:content="item/getId">Id</td>
<td tal:content="item/meta_type">Meta-Type</td>
<td tal:content="item/title">Title</td>
</tr>
</table>
A instrução tal:repeat, na linha da tabela significa "repita esta linha para cada ítem da lista
com este valor". A Instrução repeat coloca o objeto da lista dentro da variável item um de cada
vez (esta é chamada de repeat variable), e faz uma cópia da linha usando esta variável. O
valor de "item/getId"em cada linha de Id é o objeto para aquela linha, e da mesma forma que
"item/meta_type"e "item/title".
Você pode usar qualquer nome para a variável repeat ("item"é apenas um exemplo), enquanto
ele começar com alguma letra e conter somente letras, números e sublinhados ("_"). A variável
repeat é apenas um caracter de repetição. Se você tentar usar acima ou abaixo de um caracter
tr, terá um erro.
Você pode usar o nome da variável repeat para ter informações sobre uma repetição cor-
rente. Após a variável built-in no path repeat, você pode acessar a repetição se o contador for
zero (´index´), for um-1 (´número´), for A (´letra´), e várias outras formas. Portanto, a expressão
repeat/item/number é 1 na primeira linha, 2 na segunda, etc.
Desde então, um laço tal:repeat pode ser inserido em outro, mais que um pode ser ativado
ao mesmo tempo. Este é o motivo pelo qual deve ser escrito repeat/item/number no lugar de
repeat/number.
Neste momento observe a página e repare como esta lista de objetos está na mesma pasta
do modelo. Tente adicionar ou remover objetos desta pasta e repare quais os efeitos destas
mudanças.

7.3 Elementos Condicionais


Usando o modelo de páginas você pode dinamicamente inserir um texto no seu meio seleti-
vamente dependendo da condição. Por exemplo, você poderia exibir informações especiais para
responder a um cookie:
<p tal:condition="request/cookies/verbose | nothing» Here’s the extra information you reques-
ted. </p>
Usando uma instrução tal:condition você pode verificar todos os tipos de condições. Uma
instrução tal:condition não faz nada se esta expressão não tiver um valor verdadeiro, mas remove
as instruções de caracteres inteiras, incluindo os conteúdos, se o valor for falso. Zope considera o
número zero como uma seqüencia vazia, uma lista vazia, e uma variável embutida vazia a ter um
valor falso. Quase qualquer outro valor é verdadeiro, incluído números não-nulos, e seqüências
com alguma coisa (inclusive espaços!).

41
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Outro simples uso de condição para testar uma seqüencia é ver se está vazia antes do loop
terminar. Um exemplo é a última seção vendo como puxar uma tabela para repetir uma coleção
de objetos. Neste ponto é como adicionar uma verificação de página assim que a lista de objetos
é esvaziada sem a tabela ser puxada.

<table tal:condition="container/objectValues"
border="1" width="100%">

<tr>
<th>Number</th>
<th>Id</th>
<th>Meta-Type</th>
<th>Title</th>
</tr>
<tr tal:repeat="item container/objectValues">
<td tal:content="repeat/item/number">#</td>
<td tal:content="item/getId">Id</td>
<td tal:content="item/meta_type">Meta-Type</td>
<td tal:content="item/title">Title</td>
</tr>
</table>

Se esta expressão, conteiner/objectValues for falsa, então a tabela inteira é omitida.

7.4 Mudando Atributos


A maioria, se não todos, os objetos registrados pelo seu modelo têm uma propriedade ícone,
que contem um caminha para o ícone do gênero do objeto. Para mostrar este ícone numa coluna
meta-type, você precisa inserir este caminho no atributo src do tag img. Editando a coluna meta-
type em ambas as linhas você verá isto:

<td><img src="/misc_/OFSP/Folder_icon.gif"
tal:attributes="src item/icon">
<span tal:replace="item/meta_type">Meta-Type</span>
</td>

A instrução tal:attributes são trocadas no atributos src do caracter img com o valor de item/icon.
O atributo src="/misc_/OFSP/Folder_icon.gif"no modelo atua como um placeholder.
Repare que nós trocamos o atributo tal:content da célula da tabela com a instrução tal:replace
de um caracter span. Esta mudança permite você ter imagens e textos, ambos juntos na mesma
tabela.

42
Capítulo 8

Aplicações Básicas

8.1 Construindo Aplicações com Pastas


Pastas são "blocos básicos de construção"de aplicações do Zope. As pastas permitem que
você organize seus objetos no Zope, e participe ativamente em suas aplicações web.
Scripts e pastas trabalham juntos para construir simples aplicações. Pastas oferecem estru-
tura para sua informação e também oferece um framework para os comportamentos de seu site.
A pasta é usada para reter os métodos, scripts e dados da aplicação do livro de visitas, os scripts
oferecem comportamento que define como as aplicações trabalham, e os métodos oferecem
apresentação para a aplicação.
Por exemplo, suponha que você possui uma pasta Invoices para reter faturas. Você poderia
criar objetos dentro daquela pasta chamados addInvoice e editInvoice para lhe permitir adicionar
e editar faturas. Agora sua pasta Invoices torna-se uma aplicação pequena.
As URLs simples e expressivas do Zope são usadas para trabalhar com aplicações de fatura:
Como você viu, você pode exibir um objeto do Zope indo a sua URL em seu browser. Por exemplo
a URL poderia levar você a uma tela que deixa você adicionar uma fatura.

8.2 Chamando Objetos em Pastas com URLs


Os exemplos de faturas demonstram uma poderosa característica do Zope. Você pode chamar
um objeto em uma pasta indo para a URL que consiste na URL da pasta seguido do id do objeto.
Esta facilidade é usada por todo o Zope e é um padrão de design universal. Na realidade você
não está apenas restrito a chamar objetos nas pastas. Você verá mais tarde como você pode
chamar objetos em todos os tipos de objetos do Zope usando a mesma técnica de URL.
Por exemplo, suponha que você quer chamar um objeto chamado viewFolder em uma das
suas pastas. Talvez você possui diferentes objetos viewFolder em diferentes locais. O Zope
entende que o objeto que você quer é o que ele acha primeiro na pasta que você está chamando
o objeto. Se ele não pode achar o objeto lá, ele sobe um nível e olha na pasta que contém esta
pasta. Se o objeto não for achado lá ele sobe outro nível. Este processo continua até o Zope
achar o objeto ou ir para o folder raiz. Se o Zope, não pôde achar o objeto na raiz ele sobe e
alcança uma exceção.
Você verá este tipo de comportamento dinâmico do zope em muitos lugares diferentes. Esta
técnica é chamada aquisição. É dito que uma pasta adquire um objeto procurando pelo objeto
em seus repositórios.

43
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

8.3 O Objeto Especial index_html da Pasta


Como você já viu, pastas podem adquirir todos os tipos de objetos. Há um objeto especial
que o Zope usa para exibir uma pasta. Este objeto é chamado index_html.
O objeto index_html oferece uma visualização padrão da pasta. Isto se parece com a maneira
de como um arquivo index_html oferece uma visualização default para um diretório no Apache e
outros servidores web.
Por exemplo, se você criar um objeto index_htm em sua pasta Invoices e visualizar a pasta
clicando na aba View ou visitando a URL http://localhost:9673/Invoices/, o Zope chamará o objeto
index_html em sua pasta Invoices.
Uma pasta também pode adquirir um objeto Index_html de suas pastas pai da mesma ma-
neira que pode adquirir qualquer objeto. Você pode usar esse comportamento para criar uma
visualização default para um grupo de pastas todas em um lugar. Se você quer uma visualízação
default diferente da dada pelo Zope, apenas crie um objeto adaptado index_html naquela pasta.
Deste modo você pode anular o objeto index_html definido acima.

8.4 Construindo um Website no Zope


Nesta seção, você criará um simples web site para o Zope. Como webmaster, é seu trabalho
tornar o site fácil de usar e administrar. Aqui estão algumas coisas que você precisará:

• Usuários devem se mover facilmente pelo site.

• Todas as suas ferramentas de layout para web compartilhadas, como Folhas de Estilo En-
cadeadas (CSS - Cascading Style Sheet), devem estar em uma local fácil de administrar.

• Você deve oferecer simples bibliotecas de arquivos.

• Você precisa de um mapa do site de forma que usuários possam rapidamente ter uma idéia
do layout inteiro do site.

• Um livro de visitas deve ser criado de forma que os visitantes possam dar a você um feed-
back e comentários sobre seu site.

• Uma sessão what’s new deve ser adicionada a seu livro de visitas de forma que você possa
ver qualquer comentário recente que foi adicionado.

8.5 Navegação do site


Para que seu sistema de navegação funcione, seu site precisará de alguma estrutura básica
através da qual você pode navegar. Crie algumas pastas no sistema do Zope que representam a
estrutura do seu site.
Para navegar em seu site, os usuários deveriam ir primeiro a sua página principal e clicar
em uma das pastas deste nível para entrar na parte particular do site. Eles também deveriam
ser capazes de usar uma interface bem parecida, para guardar as características. Também, o
usuário deveria ser capaz de sair da sessão e ir para a sessão pincipal.
Você pode efetuar isto facilmente com o Zope. Em sua pasta Zopesite, crie um DTML Method
chamado navigation:

44
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

<ul>
<dtml-in expr="objectValues(Folder)">
<li><a href="&dtml-absolute_url;"><dtml-var title_or_id></a></li><br>
</dtml-in>
</ul>

O método que você acabou de criar mostra uma lista de links para as várias sub-seções do
site. É importante observar que este método pode trabalhar em qualquer pasta desde que não
faça nenhuma suposição sobre a pasta. Também desde que colocamos este método na pasta
Zopesite, todas as pastas podem adquiri-lo.
Agora, você precisa incorporar este método no site. Vamos colocar uma referência nele no
objeto standard_html_header de forma que o sistema de navegação esteja disponível em cada
página do site. Seu standard_html_header poderia se parecer com este:

<html>
<head><title><dtml-var title></title></head>
<body>
<dtml-var navigation>

Logo nós precisaremos adicionar uma página inicial para o site, então nós podemos ver o site
e verificar se a navegação trabalha corretamente.

8.6 Adicionando uma Página Inicial para o site


Agora, você precisa de uma página inicial que sirva como tela de recepção para os visitantes
do site. Vamos criar um DTML Method na pasta do Zopesite chamada index_html com o seguinte
conteúdo:

<dtml-var standard_html_header>
<h1>Welcome to the nome_do_site</h1>

<p>Here you will find all kinds of products.

<b><dtml-var getId></b> section.</p>


<dtml-var standard_html_footer>

Dê uma olhada em como seu site se parece clicando na aba View na pasta da raiz.
Aqui você começa a ver como as coisas estão juntas. No topo da sua página principal, você
vê uma lista de links para várias sub-sessões. Estes links são criados por um método navegação
que é chamado pelo método standard_html_header.
Você pode usar os links de navegação para navegar pelas várias seções do site. O Zope
constrói esta página para mostrar uma pasta que é procurada pelo método padrão de visualização
de pastas, index_html. Ele sobe pelas pastas do site até encontrar o método index_html na pasta
Zopesite. Ele então chama o método que esta na pasta nova_pasta e o método index_html chama
o método standard_html_header, que por sua vez chama o método navigation. Finalmente, o
método index_html exibe uma mensagem de saudação e chama o standard_html_footer.
Na pasta Reptile crie um DTML Method chamado index_html. Dê a ele algum conteúdo mais
apropriado aos répteis:

45
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

<dtml-var standard_html_header>

<h1>The nova_pasta House</h1>


<p>Welcome to the nova_pasta House.</p>

<p>We are open from 6pm to midnight Monday through Friday.</p>


<dtml-var standard_html_footer>

Agora dê uma olhada clicando na aba View.


Considerando que o método index_html na pasta nova_pasta inclui um cabeçalho e rodapé
padrão, a página ainda inclui o seu sistema de navegação.

46
Capítulo 9

Usuários e Segurança

9.1 Segurança
Todas as aplicações para web precisam administrar a segurança. Administrar a segurança
significa controlar quem pode acessar sua aplicação, e determinar o que cada um pode fazer.
Segurança não é uma questão que pode ser adicionada para proteger o sistema. Pelo contrário,
segurança deve ser um importante elemento do projeto que você deve levar em conta quando
constrói suas aplicações em Zope.
Segurança controla o que os usuários de seu site podem fazer e como você e os outros
podem manter seu site. Se você considerar cuidadosamente a segurança você pode oferecer
poderosos recursos para seus usuários e permitir que um grande grupo de pessoas trabalhe
conjuntamente com segurança para manter seu site. Se você não levar em conta segurança,
será difícil proporcionar aos seus usuários um controle seguro e administrar seu site se tornará
uma árdua e desorganizada tarefa. Seu site sofrerá não somente com as coisas erradas que as
pessoas normalmente não teriam intenção de fazer, mas será difícil para você fornecer valor aos
seus usuários e controle aos que administram seu site.
Zope entrelaça a segurança em quase todos aspectos da construção de aplicativos para web.
Zope utiliza o mesmo sistema de segurança para controlar o gerenciamento do Zope que você
costuma usar para criar usuários para sua aplicação.O Zope não faz distinção entre usar e ge-
renciar a aplicação. Isso pode parecer confuso, mas na realidade isso permite que você possa
alavancar o sistema de segurança do Zope para as necessidades da sua aplicação.
Autenticação e Autorização
Segurança no sentido amplo controla duas funções, autenticação e autorização. Autenticação
significa descobrir quem você é, e a autorização significa determinar o que você pode fazer. O
Zope oferece facilidades separadas para gerenciar o processo de reconhecimento de usuários e
concessão de acesso a ações controladas.
Quando você acessa recursos protegidos (por exemplo, visualizando uma página privada)
o Zope pedirá que você logue e procurará por sua conta de usuário. Este é o processo de
autenticação. Note que o Zope apenas autenticará você caso você queira acessar um recurso
protegido; se você apenas acessar recursos públicos o Zope continuará assumindo que você é
anonimo.
Uma vez autenticado, o Zope determina se você deve ou não ter acesso ao recurso protegido.
Este processo envolve duas camadas intermediárias entre você e o recurso protegido, roles (pa-
péis) e permissões. Usuários possuem papéis que descrevem o que podem fazer como "Author",
"Manager", e "Editor". Os objetos do Zope têm permissões que descrevem o que pode ser feito

47
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

como, por exemplo "Visualizar", "Apagar objetos", e "Gerenciar propriedades".


Políticas de segurança mapeiam os papéis para permissões; em outras palavras eles deter-
minam quem pode fazer o que. Por exemplo, uma política de segurança pode associar o papel
"Manager"com a permissão "Apagar objetos". Isso permite que os gerenciadores apaguem obje-
tos. Neste caso Zope autoriza usuário a executar acções protegidas.
Nas seguintes sessões examinaremos mais de perto a autenticação e a autorização e como
efetivamente setar as políticas de segurança. Primeiro você aprenderá sobre a autenticação
utilizando usuários e User Folders, e depois descobrirá como controlar a autorização com as
políticas de segurança.

9.2 Autenticação e Gerenciamento de Usuários


Um usuário Zope define uma conta de usuário. Um usuário Zope tem um nome, uma senha,
e opcionalmente, dados adicionais sobre quem utiliza o Zope. Para logar no Zope, você deve ter
uma conta de usuário. Vamos examinar como criar e gerenciar contas de usuários.
Criando Usuários em Pastas de Usuário Para criar contas de usuários no Zope você adici-
ona usuários aos User Folders (Diretórios de Usuários).
Vamos criar um novo usuário para que seu colega possa ajudá-lo a administrar o seu site
Zope. Vá para a pasta raiz. Clique no user folder chamado acl_users. O user folder contém
objetos usuários que definem as contas dos usuários do Zope. Clique no botão Add para criar
um novo usuário.
Escolha uma senha para seu novo usuário e digite-a nos campos Password e Confirm. Defi-
niremos as coisas de tal maneira que seu colega poderá mudar a sua senha mais tarde quando
logar. É recomendável usar uma senha do tipo "mude-me"para ajudá-lo a lembrar de mudar sua
senha.
O campo Domains possibilita que você restrinja domínios da Internet dos quais o usuário pode
logar. Isto lhe possibilita adicionar outro controle de segurança para sua conta. Por exemplo, se
você deseja que seu colega sempre logue do trabalho você poderá entrar com o seu domínio do
trabalho, por exemplo "myjob.com", no campo Domains. Você pode especificar múltiplos domínios
separados por espaços para permitir aos usuários logar de vários domínios. Por exemplo se você
decide que seu colega deveria ser capaz de gerenciar o Zope do domínio da sua casa também,
você pode setar o campo domains para "myjob.com myhome.net". Você também pode usar nú-
meros de IP com asteriscos para indicar os números nos quais esses endereços estão contidos,
ao invés de nomes de domínios para especificar domínios. Por exemplo, "209.67.167.*"englobará
todos os endereços IP que começam com "209.67.167".
A lista de seleção Roles indicam que papéis o usuário deveria ter. Em geral, usuários que
executam tarefas de gerenciamento deveriam ter o papel Manager. No caso do seu colega,
selecione o papel Manager. O papel Owner não é apropriado na maioria dos casos porque um
usuário é normalmente um proprietário de um objeto específico, não um proprietário em geral.
Para criar o novo usuário clique no botão Add. Você deveria ver um novo objeto usuário na
user folder.
Editando Usuários
Você pode editar usuários existentes clicando neles. Isso mostra um formulário muito similar
ao formulário que você usou para criar um usuário. De fato você pode controlar as mesmas
opções que acabamos de discutir deste formulário. Depois que seu colega logar na conta que
você criou para ele, ele deve ir para esta tela de gerenciamento e mudar sua senha aqui.

48
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Como todas as funções de gerenciamento do Zope, a função editar usuários está protegida
pela política de segurança. Um usuário pode apenas mudar a senha dele se ele tiver a permissão
Manage Users, que todos os administradores têm por padrão.
Os user folders funcionam como pastas normais do Zope; você pode criar, editar e apagar os
objetos contidos. Porém, os user folders não são tão poderosas como as pastas normais. Você
não pode recortar e colar uma pasta, você não pode criar nada a não ser um usuário numa pasta
de usuários. Você não pode recortar e colar em um user folder, e você não pode criar nada além
de usuários em um user folder.
Para apagar um usuário existente do user folder, selecione o usuário e clique no botão De-
lete. Lembre-se que assim como todas as outras ações no Zope, isto pode ser desfeito se você
cometeu um erro.
Contas Especiais do Usuário
O Zope oferece três contas especiais de usuários que não são definidas com diretórios de
usuários, o anonymous user (usuário anônimo), o emergency user (usuário de emergência) e o
initial manager (administrador inicial). O usuário anônimo é utilizado freqüentemente, enquanto
as contas do usuário de emergência e administrador inicial são raramente utilizadas mas é im-
portante conhecer e saber.

• Usuário Anônimo do Zope:


O Zope tem embutida, uma conta de usuário para visitantes, o usuário anônimo. Se você
não possui uma conta de usuário no Zope, você será considerado como um usuário anô-
nimo.
O usuário anônimo tem controle de segurança como qualquer outro, ele tem o papel Anony-
mous. Por default o papel Anonymous apenas pode acessar recursos públicos, e não pode
modificar nenhum objeto do Zope. Você pode modificar essa política, mas na maioria das
vezes você achará as configurações default da segurança do usuário anônimo adequadas.
Como já mencionamos anteriormente no capítulo, você deve tentar acessar um recurso
protegido para que o Zope autentique você. A conclusão é que mesmo você possuindo
uma conta de usuário, o Zope considerará você anônimo até que você se logue.

• Usuário Emergencial do Zope:


Zope possui uma conta de usuário especial para uso de emergência chamado emergency
user. O usuário de emergência não é restringido pelas configurações normais de segu-
rança. No entanto, o usuário de emergência não pode criar novos objetos com exceção de
novos objetos de usuário.
O usuário de emergência é realmente útil para duas coisas: ordenar permissões, e criar
contas de administrador. Como já vimos você pode logar como usuário de emergência para
criar a conta de administrador quando não existe nenhuma. Depois de criada a conta de
administrador você deveria deslogar como usuário de emergência e logar-se novamente
como administrador.
Outro motivo para utilizar a conta do usuário de emergência é se você ficou trancado fora
do Zope por remover permissões que precisava para gerenciar o Zope. Neste caso lo-
gue como usuário de emergência e certifique-se que sua conta de administrador possui
as permissões de Visualizar telas de gerenciamento (View management screens) e ’Mudar
permissões’ (Change permissions). Então deslogue e logue na sua conta de administrador
e você deveria ter acesso suficiente para consertar outras coisas que estão erradas.

49
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Um problema comum com usuário de emergência é a tentativa de criar um novo objeto, pois
usuário de emergência não pode criar novos objetos. Por que seria inseguro para o usuário
de emergência criar objetos sem que eles sejam submetidos à mesma segurança que os
outros objetos.

Criando um Usuário de Emergência


Diferente da conta de usuário normal que é definida pela web, a conta de usuário de emer-
gência é definida no sistema de arquivos. Você pode mudar a conta de Usuário de Emergência
editando o arquivo access no diretório do Zope. Zope possui uma linha de comando útil, zpas-
swd.py para gerenciar a conta de Usuário de Emergência. Rode zpasswd.py passando o caminho
do arquivo access :

$ python zpasswd.py access

Caso você não saiba a onde se encontrá o arquivo zpasswd.py, procure-o com o seguinte comando

$ locate zpasswd

aparecerá algo do seguinte tipo

debian:/home/katerin# locate zpasswd


/usr/lib/zope2.9/bin/zpasswd.py
/usr/lib/zope2.9/lib/python/Zope2/Startup/misc/zpasswd.py
/usr/lib/zope2.9/lib/python/Zope2/Startup/misc/zpasswd.pyc

Agora entre no caminho mostrado pelo seu terminal, exemplo:

$cd /usr/lib/zope2.9/bin/

Pronto, agora se pode entrar com o comando para gerenciar a conta de usuário:

$ python zpasswd.py access

Aparecerá os seguintes campos a preencher

Username: (coloque o nome do usuário)

Password: (digite a senha)

Verify password: (digite novamente a senha para verificá-la)

Please choose a format from:

SHA - SHA-1 hashed password CRYPT - UNIX-style crypt password CLEARTEXT - no protection.

Encoding: SHA Domain restrictions:

O script zpasswd.py guia você pelo processo de criação de uma conta de Usuário de Emer-
gência. Note que quando você digita a sua senha ela não é mostrada na tela. Você também pode
rodar zpasswd.py sem parâmetros para obter uma lista das opções de linhas de comando.

50
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Administrador Inicial do Zope


A conta do Administrador Inicial é criada pelo instalador do Zope para que você possa logar
no Zope pela primeira vez. Quando você instala Zope pela primeira vez você deveria enxergar
uma mensagem como essa:

creating default inituser file


Note:
The initial user name and password are admin
and IVX3kAwU.

You can change the name and password through the web interface or using the zpasswd.py script

Assim são informados o nome do administrador inicial e a senha. Você pode usar essa infor-
mação para logar no Zope pela primeira vez como administrador. A partir daí você cria contas de
usuário adicionais.
Os usuários iniciais são definidos de modo similar ao usuário de emergência; ele são definidos
num arquivo no sistema de arquivos chamado inituser. O programa zpasswd.py pode ser utilizado
para editar esse arquivo do mesmo modo que é usado para editar o arquivo access do usuário
de emergência:

$ python zpasswd.py inituser

Username: kate
Password:
Verify password:

Please choose a format from:

SHA - SHA-1 hashed password CRYPT - UNIX-style crypt password CLEARTEXT - no protection.

Encoding: SHA Domain restrictions:

Isso criará um novo usuário inicial chamado "kate"e setara sua senha (a senha não é mostrada
na tela quando você a digita). Quando o Zope inicia, ele verifica o usuário neste arquivo e certifica-
se que ele pode logar no Zope. Normalmente, os usuários iniciais são criados para você pelo
instalador do Zope, e você não deve se preocupar em mudá-los. Se você deseja criar usuários
adicionais, você o fará pela interface de gerenciamento Zope da web.
Até aqui nós mostramos como usuário e diretórios de usuários controlam a autenticação.
Depois veremos como controlar autorização com as políticas de segurança.

51
Capítulo 10

ZCatalog

10.1 ZCatalog

O Catalog é um mecanismo de busca embutido do Zope. Ele permite a você categorizar e


pesquisar todos os tipos de objetos do Zope. Você pode também usá-lo para procurar dados ex-
ternos tais como dados relacionais, arquivos, e páginas web remotas. Além disso, para pesquisar
você pode usar o Catalog para organizar coleções de objetos.
O Catalog suporta uma rica interface de busca. Você pode executar procura de textos com-
pletos, e pode pesquisar múltiplos índices de uma só vez. Além disso, o catalog mantém traços
de meta-dados sobre objetos indexados. Aqui estão os dois modelos de uso do ZCatalog mais
comuns:

Catalogação em Massa
Catalogar uma grande coleção de objetos todos de uma vez.

Catalogação Automática
Catalogar objetos como eles são criados e localizar mudanças realizadas neles.

Começando com Catalogação em Massa


Vamos dar uma olhada em como usar o catálogo para procurar documentos. Catalogação
de um grupo de objetos todos de uma vez é chamada catalogação em massa. Catalogação em
massa envolve três passos:
1. Criar um ZCatalog

52
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

2. Encontrar objetos e catalogá-los

3. Criar uma interface web para procurar o catálogo.

Escolha Zcatalog da lista de adição de produtos para criar um objeto ZCatalog

O formulário de adição pede a você um Id e um Title. O terceiro elemento do formulário é a


caixa de seleção Vocabulary. Por enquanto, deixe essa caixa em "Create one for me". Dê a seu
ZCatalog o Id "AnimalTracker"e clique em Add para criar seu novo catálogo. O ícone do Catalog
parece com uma pasta com uma pequena lupa nele. Selecione o ícone AnimalTracker para ver a
aba Contents do Catalog.
Um ZCatalog parece muito com uma pasta, mas ele tem um pouco mais de abas. Seis abas
no ZCatalog são exatamente as mesmas seis abas que você encontra em uma pasta padrão. O
ZCatalog tem as seguintes abas: Contents, Catalog, Properties, Indexes, MetaData, Find Objects,
Advanced, Undo, Security e Ownership. Quando você clica em um Zcatalog, você está na aba
Contents. Aqui, você pode acrescentar novos objetos e o ZCatalog os incluirá da mesma maneira
que qualquer pasta faz. Você deve notar que restrição não significa que o objeto está disponível
para pesquisa.
Agora que você criou um ZCatalog, você pode seguir para o próximo passo, encontrar objetos
e catalogá-los.
Visitantes de seu site querem ser capazes de pesquisar informações. Para isso você deve
oferecer a capacidade de pesquisar por certas palavras e mostrar todos os documentos que
contém essas palavras. A pesquisa é uma das mais úteis e comuns atividades da web.
O ZCatalog que você criar pode catalogar todos os documentos em seu site Zope e deixar seu
usuário pesquisar por palavras específicas. Para catalogar seus documentos, vá para o ZCatalog
criado e clique na aba Find Objects.
Nessa aba, você diz ao ZCatalog em que tipo de objetos você está interessado. Você quer
catalogar todos DTML Documents então selecione DTML Document da seleção múltipla Find
objects of type e clique Find and Catalog.
O ZCatalog agora começará da pasta onde ele está situado e procurará todos os DTML Do-
cuments Ele pesquisará na pasta e então descerá para dentro de todas as sub-pastas e suas
sub-pastas. Se você tem vários desses objetos, isso pode levar um longo tempo para terminar,
então seja paciente.
Depois de um período de tempo, o Catalog levará você para a view Catalog automaticamente,
com uma mensagem dizendo-lhe o que ele acabou de fazer.
Abaixo da informação de status está uma lista de objetos que estão catalogados, eles são
todos DTML Documents. Para confirmar que esses são os objetos que você está interessado,
você pode clicar neles para olhá-los.

53
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Você completou o primeiro passo da pesquisa de seus objetos, catalogando-os em um ZCata-


log. Agora seus documentos estão no banco de dados do ZCatalog. Agora você pode seguir para
o terceiro passo, criando uma página web e formulário de resultado para consultar o ZCatalog.
Formulários de Busca e Relatório.
Para criar formulários de busca e relatório, certifique-se de que você está no catálogo que
você criou e selecione Z Search Irteface da lista de adição. Depois selecione-o como o objeto
disponível para pesquisa.
Nomeie o Report Id "SearchResults"e o Search Input Id "SearchForm"e clique Add. Isso criará
dois novos DTML Methods no ZCatalog chamados SeachForm e SearchResults.
Esses objetos estão incluídos no ZCatalog, mas eles não estão catalogados pelo ZCatalog.
Os métodos de busca do relatório e do formulário são apenas uma interface de usuário para pes-
quisar documentos no Catalog. Você pode verificar isso notando que os formulários de pesquisa
e relatório não estão listados na aba Cataloged Objects.
Para procurar o ZCatalog , selecione o método SearchForm e clique em sua aba View. Esse
formulário tem vários elementos nele. Há um elemento de pesquisa para cada índice no ZCatalog.
Por enquanto você pode deixar todos os outros elementos do formulário em branco.

10.2 Configurando Catálogos


O Catalog é capaz de realizar pesquisas muito mais poderosas e complexas do que aquela
que você acabou de realizar. Vamos dar uma olhada em como o Catalog armazena informação.
Isso ajudará você a aprimorar seus catálogos para fornecerem o tipo de pesquisa que você quer.

Definindo Índices

ZCatalogs armazenam informação sobre objetos e seus conteúdos em bancos de dados rápi-
dos chamados índices. Índices podem armazenar e reaver grandes volumes de informação muito
rapidamente. Você pode criar diferentes tipos de índices que lembram diferentes tipos de informa-
ção sobre seus objetos. Por exemplo, você poderia ter um índice que lembra o conteúdo de texto
dos DTML Documents, e um outro índice que lembra alguns objetos que têm uma propriedade
específica.
Quando você procura um ZCatalog, você não está procurando por seus objetos um por um.
Isso levaria tempo demais se você tivesse muitos objetos. Antes de você procurar um ZCatalog,
ele procura seus objetos e lembra tudo que você disse-lhe para lembrar sobre eles. Esse pro-
cesso é chamado indexação. Daqui em diante, você pode procurar por determinados critérios e
o ZCatalog retornará objetos que atendam os critérios que você forneceu.
Quando você cataloga um objeto o Catalog usa cada índice para examinar o objeto. O ca-
tálogo consulta atributos e métodos para encontrar um valor do objeto para cada índice. Por
exemplo, no caso dos DTML Documents catalogados com um índice PrincipiaSearchSource, o
Catalog chama cada método PrincipiaSearchSource do documento e grava o resultado em seu
índice PrincipiaSearchSource. Se o Catalog não pode encontrar um atributo ou método para um
índice, então ele ignora-o. Em outras palavras, é bom se um objeto não suporta um determinado
índice. Existem três tipos de índices:

54
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

TextIndex
Procura texto. Use esse tipo de índice quando você quer uma pesquisa de texto completo.

FieldIndex
Pesquisa objetos por valores específicos. Use esse tipo de índice quando você quer pesquisar
objetos data, números, ou strings específicas.

KeywordIndex
Pesquisa coleções de valores específicos. Esse índice é como um FieldIndex, mas ele per-
mite a você procurar coleções em lugar de valores únicos.

PathIndex
Procura por todos objetos que contém certos elementos do path da URL.

Nós examinaremos esses diferentes índices mais de perto posteriormente no capítulo. Índices
novos podem ser criados a partir da aba Indexes de um ZCatalog. Aí, você pode entrar com o
nome e selecionar um type para seu novo índice. Isso cria um índice novo e vazio no ZCatalog.
Para colocar informação neste índice, você precisa ir para a aba Advanced e clicar no botão
Update Catalog. Recatalogar seu conteúdo pode demorar um tempo se você tiver muitos objetos
catalogados.
Para remover um índice de um Catalog, selecione os índices e clique no botão Delete. Isso
apagará o índice e todo seu conteúdo indexado. Como sempre, essa operação não pode ser
desfeita.

Definindo Meta Dados

O ZCatalog não apenas indexa informação sobre seu objeto, mas ele pode também arma-
zenar informação sobre seu objeto em um tabular database chamado Meta-Data Table (Tabela
Meta-Dados). A Tabela Meta-Dados funciona similarmente a uma tabela de banco de dados re-
lacional, ela consiste de uma ou mais colunas que definem o esquema da tabela. A tabela está
preenchida com linhas de informação sobre objetos catalogados. Essas linhas podem conter in-
formação sobre objetos catalogados que você quer armazenar na tabela. Suas colunas de meta
dados não precisam ligar seus índices do Catalog. Índices permitem você pesquisar; meta-dados
permite você informar resultados da pesquisa.
A Tabela Meta-Dados é útil para gerar relatórios de pesquisa. Ela mantém o caminho da
informação sobre objetos que vão em seus formulários de relatório. Por exemplo, se você cria
uma coluna de Tabela Meta-Dados chamada absolute_url, então seus formulários de relatório
podem usar essa informação para criar links a seus objetos que são retornados nos resultados
da pesquisa.
Para adicionar uma nova coluna da Tabela Meta-Dados, digite no nome da coluna na aba
Meta-Data Table e clique Add. Para remover uma coluna da Tabela Meta-Dados, selecione a
coluna cheque a caixa e clique no botão Delete. Isso apagará a coluna e todo seu conteúdo para

55
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

cada linha. Como sempre, essa operação não pode ser desfeita. Logo vamos ver mais de perto
como procurar um Catalog.

Buscando em Catálogos

Você pode procurar um Catalog passando-o termos de procura. Esses termos de procura
descrevem o que você está procurando em um ou mais índices. O Catalog pode coletar essa
informação da requisição da web, ou você pode passar essa informação explicitamente do DTML
ou Python. Em resposta para uma requisição de pesquisa, um Catalog retornará uma lista de
registros correspondendo aos objetos catalogados que ligará os termos de pesquisa.

56
Capítulo 11

Banco de Dados

11.1 Banco de Dados


O Zope usa um banco de dados objeto para armazenar objetos do Zope. Bancos de dados re-
lacionais tais como Oracle, Sybase e PostgreSQL armazenam informações de modos diferentes.
Bancos de dados relacionais armazenam suas informações em tabelas.
A informação na tabela é armazenada em linhas. O layout das colunas da tabela é chamado
de esquema. Uma linguagem padrão, chamada Structured Query Language (SQL - Linguagem
de Busca Estruturada), é utilizada para consultar e alterar tabelas em bancos de dados relacio-
nais.
O Zope não armazena suas informações dessa forma. O banco de dados objeto do Zope
permite muitos tipos diferentes de objetos que têm muitos tipos diferentes de relacionamentos
uns com os outros. Dados relacionais não são facilmente mapeados em objetos uma vez que
dados relacionais assumem um modelo de dados orientado a tabelas muito mais simples. O
Zope fornece vários mecanismos para obtenção de dados relacionais e para usá-los no mundo
dos objetos do Zope, incluindo Database Adapters e SQL Methods.
O uso mais comum para o suporte ao banco de dados relacionais do Zope é para colocar
bancos de dados relacionais existentes na web. Por exemplo, suponha que você precise ter um
banco de dados de empregados. Seu banco de dados vem com ferramentas para permitir os
administradores rodarem relatórios e alterarem dados. Entretanto, é difícil para os empregados
verem seus próprios registros e fazerem uma simples manutenção, como uma atualização no seu
endereço quando eles se mudam. Através do interfaceamento do seu banco de dados relacional
com o Zope, seus empregados podem usar qualquer web browser para ver e atualizar seus
registros do escritório ou de casa.
Usando o seu banco de dados relacional com Zope você obtém todos os benefícios do Zope,
incluindo segurança, apresentação dinâmica, serviços de rede, e mais. Você pode usar Zope
para modelar dinamicamente seu acesso aos dados, apresentação de dados, e administração de
dados.
Para usar banco de dados relacional no Zope você deve criar dois diferentes objetos do Zope,
um Database Connection e um Z SQL Method. A Conexão de Banco de Dados diz ao Zope como
conectar com um banco de dados relacional. O Método Z SQL descreve uma ação para consulta
em um banco de dados. O Método Z SQL utiliza a Conexão de Banco de Dados para conectar-se
com o banco de dados relacional.

57
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Usando Conexões de Banco de Dados

Conexões de Banco de Dados são utilizadas para estabelecer e administrar conexões com
bancos de dados relacionais externos. Conexões de Banco de Dados devem ser estabelecidas
antes que os métodos de banco de dados possam ser definidos. Todo Método Z SQL deve ser
associado com uma conexão de banco de dados. Adaptadores de banco de dados (ou DAs, para
abreviar) estão disponíveis para os seguintes bancos de dados:

Oracle
Oracle é um banco de dados relacional comercial popular e poderoso. Este DA é escrito e
tem suporte comercial por parte da Zope Corporation.

Sybase
O Sybase é outro banco de dados relacional comercial popular. O Sybase DA é escrito e tem
suporte comercial por parte da Zope Corporation.

ODBC:
ODBC é um protocolo padrão da indústria, independente de plataforma, código fonte aberto,
suportado por muitos bancos de dados comerciais. O DA ODBC é escrito e tem suporte comer-
cial por parte da Zope Corporation.

PostgreSQL:
PostgreSQL é um banco de dados relacional de fonte aberto líder. Há vários adaptadores de
banco de dados para o PostgreSQL, incluindo ZpoPy, que é mantido pelo membro da comunidade
do Zope Thierry Michel. Você pode encontrar mais informação sobre PostgreSQL no web site do
PostgreSQL.

MySQL:
MySQL é um banco de dados relacional rápido de fonte aberto. Você pode encontrar mais
informação sobre MySQL no web site do MySQL. O DA MySQL é mantido pelo membro da co-
munidade Zope Monty Taylor.

Interbase:
Interbase é um banco de dados relacional de fonte aberto da Borland/Inprise. Você pode
encontrar mais informação sobre Interbase no web site da Borland. Você pode também ficar
interessado no FireBird, que é uma comunidade mantida no ramo do Interbase. O adaptador
Interbase do Zope é mantido pelo membro da comunidade Zope Bob Tierney.

Gadfly:
Gadfly é um banco de dados relacional escrito em Python por Aaron Waters. Gadfly está

58
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

incluso com o Zope para propósitos de demonstração e pequenos conjuntos de dados. Gadfly é
rápido, mas não é significativo para grandes quantias de informação, uma vez que lê o banco de
dados inteiro dentro da memória.
Com excessão do Gadfly, todos os bancos de dados relacionais rodam como processos exter-
nos ao Zope. Na verdade, seu banco de dados relacional não necessita rodar sempre na mesma
máquina que o Zope, pois o Zope pode conectar-se à máquina na qual o banco de dados está
rodando. Todos os bancos de dados relacionais mencionados têm sua própria documentação de
instalação e configuração, que você deveria consultar para detalhes específicos.
Devido ao Gadfly rodar dentro do Zope, você não necessita especificar qualquer informa-
ção de conexão para o Zope encontrar o banco de dados. Uma vez que todos os outros tipos
de bancos de dados rodam externamente ao Zope, eles requerem que você especifique como
conectar-se ao banco de dados. Esta especificação, chamada de connection string, é diferente
para cada tipo de banco de dados.
Para usar o banco de dados relacional de sua escolha através do Zope, você deve fazer o
download e instalar o adaptador de banco de dados para o seu banco de dados relacional espe-
cífico. Adaptadores de banco de dados podem ser baixados da sessão Products do Zope.org. A
exceção para isto é o Gadfly, que está incluso com o Zope.
Após ter instalado o produto adaptador para o seu banco de dados, você pode criar uma nova
conexão de banco de dados selecionando-a em Add List. Todas as conexões de banco de dados
são bastante parecidas. Selecione o Z Gadfly Database Connection da Lista de adição. Isso
levará você para o formulário de adição para uma conexão de banco de dados Gadfly.

Selecione o data source (fonte de dados) Demo, especifique Gadfly_database_connection


para o id, e clique no botão Add. Isso criará uma nova conexão de banco de dados Gadfly.
Selecione a nova conexão clicando nela.
Você está olhando a aba Status da conexão com o banco de dados Gadfly (Gadfly Database
Connection). Essa aba diz a você se você está conectado ou desconectado com o banco de
dados, e tem um botão para conectar ou desconectar. No geral o Zope administrará a conexão
com o seu banco de dados para você, então existem poucas razões para controlar manualmente
a conexão. Para o Gadfly, conectar e desconectar não tem sentido, mas para bancos de dados
externos você pode querer conectar ou desconectar manualmente para fazer manutenção no
banco de dados.
A próxima aba é a Properties. Essa aba mostra à você o datasource (a fonte de dados) e
outras propriedades da conexão com o banco de dados. Isso é útil se você quiser mover a sua
conexão de banco de dados de um datasource para outro.

59
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Você pode testar sua conexão a um banco de dados indo para a aba Test. Essa aba permite
que você digite código SQL diretamente e o execute em seu banco de dados. Essa aba é apenas
para testar seu banco de dados e emitir comandos SQL (como criação de tabelas). Esse não é
o local onde você entrará com a maior parte de seu código SQL. Os comandos SQL estão nos
métodos Z SQL.
A aba Test da conexão com o banco de dados permite você enviar sentenças SQL diretamente
para o seu banco de dados. Você pode criar tabelas digitando código SQL diretamente na aba
Test; não há necessidade de usar um SQL Method para criar tabelas. Crie uma tabela chamada
employees com o seguinte código SQL:

CREATE TABLE employees

(
emp_id integer,

first varchar,

last varchar,

salary float
)

Clique no botão Submit Query para rodar o comando SQL. O Zope deve retornar uma tela de
confirmação que diz à você o que o código SQL rodou e o resultado, se houver algum.
A SQL usada aqui pode diferir dependendo do seu banco de dados. Para detalhes exatos de
criação de tabelas com seu banco de dados, consulte a documentação específica do usuário do
banco de dados.
Essa SQL criará uma nova tabela em seu banco de dados Gadfly, chamada employees. Essa
tabela terá quatro colunas, emp_id, first, last e salary. A primeira coluna é a identificação do
empregado, que é um único número que identifica o empregado. As próximas duas colunas tem
tipo varchar que é similar à uma string. A coluna salary tem tipo float que suporta números de
ponto flutuante. Todos os bancos de dados suportam espécies de tipos, então, consulte sua
documentação para achar que espécies de tipos seu banco de dados suporta.
Para garantir que a identificação do empregado é um único número você pode criar um índice
em sua tabela. Digite o seguinte código SQL na aba Test:

CREATE UNIQUE INDEX emp_id ON employees

(
emp_id
)

Agora você tem uma tabela e um ídice. Para examinar sua tabela, vá para a aba Browse. Esta
aba deixa você ver as tabelas de seu banco de dados e seus esquemas. Aqui, você pode ver que
há uma tabela employees, e se você clicar no símbolo de mais, (+) a tabela expande para mostrar
quatro colunas, emp_id, first, last e salary.
Esta informação é muito útil quando se cria aplicações SQL complexas, com muitas tabelas
grandes que deixa você ver os esquemas de suas tabelas. Nem todos os bancos de dados
suportam navegação em tabelas.

60
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Agora que você criou uma conexão de banco de dados e tem definida uma tabela, você pode
criar Z SQL Methods para operar em seu banco de dados.

11.2 Método Z SQL


Os Z SQL Methods são objetos do Zope que executam código SQL através de uma Conexão
de Banco de Dados. Todos os Métodos Z SQL devem ser associados com uma Conexão de
Banco de Dados. Z SQL Methods podem tanto consultar bancos de dados quanto alterar dados.
Z SQL Methods podem também conter mais que um comando SQL.
Primeiro, você precisa criar um novo Z SQL Method chamado hire_employee que insere um
novo empregado na tabela employees. Quando um novo empregado é admitido, este método é
chamado e um novo registro é inserido na tabela employees que contém as informações sobre o
novo empregado. Selecione Z SQL Method da Add List. Isto levará você ao formulário de adição
de Z SQL Methods.

Como sempre, você deve especificar um id e um title para o Z SQL Method. Além disso, você
precisa selecionar uma Conexão de Banco de Dados para usar com este Z SQL Method. Dê à
este novo método o id hire_employee e selecione a Gadfly_database_connection que você criou
na última seção.
Em seguida, você pode especificar argumentos para o Z SQL Method. Assim como Scripts, Z
SQL Methods podem ter argumentos. Argumentos são utilizados para construir expressões SQL.
Neste caso seu método necessita quatro argumentos, o número de identificação do empregado,
o primeiro nome, o último nome e salário do empregado. Digite "emp_id first last salary"no campo
Arguments. Você pode colocar cada argumento em sua própria linha, ou você pode colocar mais
de um argumento na mesma linha separados por espaços. Você pode também fornecer valores
padrões para argumentos como mos Scripts Python.
O último campo do formulário é o Query template. Esse campo contém o código SQL que é
executado quando o Z SQL Method é chamado. Neste campo, entre com o seguinte código:

insert into employees (emp_id, first, last,salary) values


(<dtml-sqlvar emp_id type="int">,
<dtml-sqlvar first type="string">,

61
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

<dtml-sqlvar last type="string">,


<dtml-sqlvar salary type="float">
)

Como sempre, você deve especificar um id e um title para o Z SQL Method. Além disso, você
precisa selecionar uma Conexão de Banco de Dados para usar com este Z SQL Method. Dê à
este novo método o id hire_employee e selecione a Gadfly_database_connection que você criou
na última seção.
Em seguida, você pode especificar argumentos para o Z SQL Method. Assim como Scripts, Z
SQL Methods podem ter argumentos. Argumentos são utilizados para construir expressões SQL.
Neste caso seu método necessita quatro argumentos, o número de identificação do empregado,
o primeiro nome, o último nome e salário do empregado. Digite "emp_id first last salary"no campo
Arguments. Você pode colocar cada argumento em sua própria linha, ou você pode colocar mais
de um argumento na mesma linha separados por espaços. Você pode também fornecer valores
padrões para argumentos como mos Scripts Python.
O último campo do formulário é o Query template. Esse campo contém o código SQL que é
executado quando o Z SQL Method é chamado. Neste campo, entre com o seguinte código:

insert into employees (emp_id, first, last,salary) values


(<dtml-sqlvar emp_id type="int">,
<dtml-sqlvar first type="string">,
<dtml-sqlvar last type="string">,
<dtml-sqlvar salary type="float">
)

Note que este código SQL também contém DTML. O código do DTML neste modelo é utilizado
para inserir os valores dos argumentos dentro do código SQL que será executado em seu banco
de dados. Assim, se o argumento emp_id teve o valor 42, o argumento first teve o valor Bob e o
seu argumento last teve o valor Uncle e o argumento salary teve o valor 50000.00 então o modelo
de query poderia criar o seguinte código SQL:

Insert into employees (emp_id, first, last, salary) values


(42,
'Bob',
'Uncle',
50000.00
)

Você tem à sua escolha três botões para clicar para adicionar seu novo Z SQL Method. O
botão Add criará o método e levará você de volta para o folder contendo o novo método. O botão
Add and Edit criará o método e o fará o objeto correntemente selecionado no Workspace. O botão
Add and Test criará o método que levará você a aba Test do método então você pode testar o
novo método. Para adicionar seu novo Z SQL Method, clique o botão Add.
Agora você tem um Z SQL Method que insere novos empregados na tabela employees. Você
necessitará outro Z SQL Method para consultar a tabela de empregados. Crie um novo Z SQL
Method com o id list_all_employees. Ele não deveria ter nenhum argumento e conter o código
SQL:
select * from employees

62
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Este simples código SQL seleciona todo as linhas da tabela employees. Agora você tem dois
Z SQL Methods, um para inserir novos empregados e um para ver todos os empregados no banco
de dados. Vamos testar seus dois novos métodos inserindo alguns novos empregados na tabela
employees e depois listando-os. Para fazer isto, clique no método hire_employees e clique na
aba Test. Isto levará você para a aba Test do método.
Aqui, você vê um formulário com quatro caixas de entrada, uma para cada argumento para
o Z SQL Method hire_employee. O Zope gera automaticamente este formulário para você ba-
seado nos argumentos de seu Z SQL Method. Pelo fato do Método hire_employee ter quatro
argumentos, o Zope cria este formulário com quatro caixas de entrada. Você pode testar este
método entrando com um número de empregado, um primeiro nome, um último nome, e um sa-
lário para seu novo empregado. Entre com o id do empregado "42", "Bob"para o primeiro nome,
"McBob"para o último nome e um salário de "50000.00". Então clique o botão Test. Você verá
então os resultados de seu teste.
A tela diz This statement returned no results. Isto é porque o método hire_employee apenas
insere nova informação na tabela, isto não seleciona qualquer informação fora da tabela, assim
não retornaram registros. A tela também mostra à você como o modelo de query é renderizada
no SQL. Como esperado, as tags do DTML sqlvar renderizaram os quatro argumentos dentro do
código válido da SQL que seu banco de dados executou. Você pode adicionar tantos empregados
quanto você quiser testando repetidamente este método.
Para verificar que a informação que você adicionou está sendo inserida dentro da tabela,
selecione o Z SQL Method list_all_employees e clique em sua aba Test.
Esta visão diz This query requires no input, indicando que o list_all_employees não tem qual-
quer argumento e assim, não requer entrada para executar. Clique no botão Submit Query para
testar o método.
O método list_all_employees retorna os conteúdos de sua tabela employees. Você pode ver
todos os novos empregados que você adicionou. O Zope automaticamente gera esta tela de
relatório com tabela para você. Em seguida nós mostraremos como você pode criar sua própria
interface de usuário para seus Z SQL Methods para integrá-los dentro do seu web site.

63
Capítulo 12

ZEO

12.1 Introdução
Quando um site da Web recebe mais pedido do que pode suportar ele pode tornar-se lento e
não responder. No pior caso muitos pedidos feitos a um web site podem causar ao servidor uma
sobrecarga completa, interrupção do controle de solicitações e possivelmente até travar. Este
pode ser um problema para qualquer tipo de servidor de aplicação, mas não para o Zope. A
solução óbvia para este problema é usar mais de um computador, caso um computador falhar, o
outro computador pode continuar servindo seu site na Web.
Usar vários computadores obviamente tem seus benefícios, mas isto também tem alguns
inconvenientes. Por exemplo, se você tivesse cinco computadores rodando Zope então você deve
assegurar que todas as cinco instalações do Zope tenham as mesmas informações. Esta não é
uma tarefa muito difícil se você for o único usuário e você tiver somente alguns objetos estáticos,
mas para grandes organizações com milhares de objetos mudando rapidamente, manter cinco
instalações separadas do Zope sincronizadas manualmente seria um pesadelo. Para resolver
este problema, a Zope Corporation criou o Zope Enterprise Objects , ou ZEO. Esta lição dá a
você uma breve visão da instalação do ZEO.

12.2 ZEO
É um sistema que permita que você rode seu site em mais de um computador. Isto é chamado
frequentemente de clustering (escalabilidade) e load balancing (equilíbrio da carga). Rodando o
Zope em vários computadores, você pode propagar os pedidos igualmente por todos os lados e
adicionar mais computadores quando aumentar a quantia de pedidos. Mas, se um computador
falhar ou travar, outros computadores podem ainda servir os pedidos enquanto você reparar a
falha.
O ZEO roda o Zope em vários computadores e cuida para que todas as instalações do
Zope compartilhem o mesmo banco de dados todas as vezes. ZEO usa uma arquitectura cli-
ente/servidor. As instalações do Zope em vários computadores são os ZEO Clients (Clientes do
ZEO). Todos os clientes se conectam a um ZEO Storage Server (Servidor Central de Armazena-
mento do ZEO).
A terminologia pode ser um pouco confusa, porque normalmente você pensa no Zope como
um servidor, não como um cliente. Ao usar ZEO, os processos do Zope actuam como servidores
(para pedidos da Web) e clientes (para dados do servidor ZEO).

64
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Os clientes e os servidores do ZEO comunicam-se usando protocolos padrão da Internet,


assim podem estar no mesmo lugar ou em diferentes países. ZEO, na realidade, pode distribuir
um site do Zope por todo o mundo.
Quando usar ZEO?
O ZEO serve muitos acessos de uma maneira bem segura. Se seu site não tem milhões de
acessos, então provavelmente você não precisará do ZEO. Não há regras específicas para saber
quando você deveria ou não deveria usar o ZEO, mas para a maior parte você não precisaria
rodar o ZEO a menos que:

• Seu site está recebendo muitos acessos para seu computador gerenciá-los rapidamente.
Zope é um sistema de alta performance, e um Zope pode gerenciar milhões de acessos por
dia (dependendo de seu hardware, é claro). Se você precisa servir mais acessos do que
isto, então você deveria usar o ZEO.
• Seu site está muito crítico e requer constante funcionamento, 24 horas por dia. Nesse caso,
ZEO permitirá que você tenha vários servidores resistentes a falhas.
• Você quer distribuir seu site globalmente para diferentes mirrors clientes do ZEO.
• Você quer debugar um cliente do ZEO enquanto outros servem os pedidos.

Todos estes casos são bastante avançados, de alta capacidade de uso do Zope. Instalar,
configurar, e manter sistemas como este requerem conhecimentos e recursos avançados sobre
administração de sistema. A maioria dos usuários de Zope não precisarão do ZEO, ou não
podem ter a perícia necessária para manter um sistema distribuído do servidor como ZEO. ZEO
é divertido, e pode ser muito útil, mas antes de arriscar e instalar ZEO em seu sistema você
deveria decidir a sobrecarga administrativa extra que o ZEO cria contra a simplicidade de rodar
apenas o Zope sozinho.
Instalando e Rodando ZEO
A configuração mais comum do ZEO é um servidor e vários clientes do ZEO. Antes de instalar
e configurar ZEO de qualquer forma, considere os seguintes tópicos:

• Todos os clientes e servidores do ZEO devem rodar a mesma versão do Zope. Certifique-
se que todos seus computadores usam a última versão. Isto é necessário, ou o Zope pode
comportar-se anormalmente ou não funcionar de nenhuma maneira.
• Todos os seus clientes ZEO devem ter os mesmos Produtos externos instalados e eles
devem ser a mesma versão. Isto é necessário, ou os objetos externos podem comportar-se
anormalmente ou não trabalhar de nenhuma maneira.
• Se o seu sistema Zope requer acesso a recursos externos do Zope, como servidor de e-mail
ou banco de dados relacional, assegure-se que todos os seus cliente ZEO possuem acesso
a estes recursos.
• As conexões de rede lentas ou interrompidas entre clientes e servidores degradam o de-
sempenho de seus clientes ZEO. Os clientes ZEO deveriam ter uma conexão boa com seu
servidor.

ZEO não é distribuído com o Zope, você deve baixá-lo da Secção de Produtos do Zope.org.
Instalar ZEO requer um pouco de preparação manual. Para instalar o ZEO faça o download
do ZEO-1.0.tgz do site Zope.org e coloque no diretório de instalação do seu Zope. Agora, desem-
pacote o tarball. No Unix, isto pode ser feito com o seguinte comando:

65
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

$ tar -zxf ZEO-1.0.tgz

No Windows, você pode descompactar o arquivo com o WinZip. Antes de instalar o ZEO,
certifique-se que você fez uma cópia de segurança do seu sistema Zope.
Agora você deveria ter um diretório ZEO-1.0. Depois, você tem que copiar alguns arquivos no
diretório lib/python no nível mais alto do Zope. Isto pode ser feito em UNIX com:

$ cp -R ZEO-1.0/ZEO lib/python

Agora, você tem que criar um arquivo especial no diretório raiz do Zope chamado custom_zodb.py.
Neste arquivo coloque o seguinte código Python:

import ZEO.ClientStorage
Storage=ZEO.ClientStorage.ClientStorage((localhost,7700))

Isto configurarará o Zope para rodar como um cliente ZEO. Se você passar a ClientStorage
uma tupla, como este código faz, a tupla deve ter dois elementos, uma string que contém o ende-
reço para o servidor, e a porta que o servidor está respondendo. Neste exemplo, vamos mostrar-
lhe como rodar ambos os clientes e os servidores na mesma máquina, o nome da máquina é
setado para localhost.
Agora, você tem o ZEO configurarado para rodar em um computador. Teste primeiramente
iniciando o servidor.
Agora, em outra janela, inicie o Zope como você normalmente faria, com o script z2.py:

$ python z2.py -D

------ 2000-10-04T20:43:11 INFO(0) client Trying to connect to server ------ 2000-10-04T20:43

Observe como no exemplo acima, o Zope diz a você client Trying to connect to server e então
ClientStorage Connected to storage. Isto significa que seu cliente ZEO conectou-se com sucesso
a seu servidor ZEO. Agora, você pode visitar http://localhost:9673/manage (ou qualquer URL que
seu cliente ZEO estiver escutando) e logue no Zope como sempre.
Como você pode ver, tudo tem a mesma aparência. Vá ao Control Panel e click em Database
Managment. Aqui, você vê que o Zope está conectado a um ZEO Storage e que seu estado está
connected.
Rodar o ZEO em um computador é uma boa maneira de familiarizar-se com o ZEO saber
como ele funciona. Entretanto, rodar o ZEO em um computador não melhora a velocidade de seu
site, e de fato, pode retardá-lo um pouco. Para realmente obter os benefícios de velocidade que
o ZEO oferece, você precisa rodar o ZEO em diversos computadores.
Como Rodar ZEO em Vários Computadores
É muito parecido configurar o ZEO para rodar em vários computadores e rodar em apenas
um computador. Existem geralmente dois passos, o primeiro passo é iniciar o servidor ZEO, e o
segundo passo é iniciar um ou mais clientes ZEO.
Por exemplo, digamos que você tem quatro computadores. Um computador chamado zooser-
ver será o seu servidor ZEO, e os outros três computadores, chamados zeoclient1, zeoclient2 e
zeoclient3, serão seus clientes ZEO.
O primeiro passo é rodar o servidor no zooserver. Para dizer ao seu servidor ZEO escutar no
socket tcp na porta 9999 na interface zooserver, rode o servidor com este script start-py:

$ python lib/python/ZEO/start.py -p 9999 -h zooserver.zopezoo.org

66
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Isto irá iniciar o servidor ZEO. Agora, você pode iniciar seus clientes indi em cada cliente e
configurarando cada um deles com os seguintes

custom_zodb.py:

import ZEO.ClientStorage
Storage=ZEO.ClientStorage.ClientStorage((zooserver.zopezoo.org,9999))
Agora, você pode iniciar cada script z2.py do cliente como mostra na seção anterior, Instalando
e Rodando ZEO. Observe como o host e porta para cada cliente é a mesma, é por isso que todos
se conectam com o mesmo servidor. Seguindo esses procedimentos para cada um dos três
clientes você terá três diferentes instalações do Zope todas servindo o mesmo site Zope. Você
pode verificar isto indo para a porta 9673 em todos as três máquinas clientes do seu ZEO.
Você provavelmente quer rodar o ZEO em mais de um computador assim você pode tirar
vantagem do aumento da velocidade que vai ser proporcionado. Rodar em mais computadores
significa que você pode servir mais acessos por segundo que com somente um computador.
Distribuir a carga de seus visitantes entretanto requer um pouco mais de elaboração de seu
sistema.

67
Capítulo 13

Extendendo o Zope

13.1 Produtos no Zope


Você pode estender o Zope criando seus próprios tipos de objetos que são adequados para
as necessidades da aplicação. Novos tipos de objetos são instalados no Zope pelos Products.
Produtos são estensões para o Zope que a Zope Corporation e muitos outros desenvolvedores
criaram. Há milhares de Produtos diferentes e muitos servem objetivos específicos. Uma biblio-
teca completa dos Produtos é a Sessão Documentação do Zope.org.
Products podem ser desenvolvidos de duas maneiras, através da web usando ZClasses, e
na linguagem de programação Python. Products podem até ser um híbrido de produtos feitos
através da web e com código Python. Desenvolver um Produto inteiramente com programação
em Python está fora do escopo deste documento e você deveria visitar o Zope.org para docu-
mentação específica sobre desenvolvimento de Produtos.
O primeiro passo na customização do Zope começa na próxima seção, onde você aprende
como criar novos Produtos no Zope.
Criando Produtos Zope
Através da web os Produtos são armazenados na pasta Product Management no Painel de
Controle. Clique no Control_Panel no root folder e então clique em Products.
Cada caixa azul representa um Produto instalado. Desta tela, você pode gerenciar estes
Produtos. Alguns Produtos são construídos no Zope por default ou foram instalados por você ou
seu administrador. Estes Produtos têm um ícone de caixa fechada. Produtos com a caixa fechada
não podem ser gerenciados através da web. Você pode obter informações sobre estes produtos
clicando neles, mas você não pode mudá-los.
Você também pode criar seus próprios Produtos que você pode gerenciar através da web.
Seus Produtos deixam você criar novos tipos de objetos no Zope. Estes objetos gerenciáveis
através da web tem ícones de caixa aberta.
Criaando um Produto do Zope, você pode criar facilidades para gerenciar objetos que seus
usuarios possam usar. você pode definir modelos de demonstração que você pode mudar uma
vez e afetar todas as demonstrações. Você pode fazer estas coisas criando Produtos do Zope.
Criando um Produto Simples
Usando Produtos você pode resolver os problemas de gerenciamento e criação de exibição.
Iremos iniciar com um exemplo de como criar um produto simples que lhe permitirá coletar infor-
mações de como exibir e criar uma exibição personalizada.
O principal de um produto do Zope é que ele lhe permite criar objetos em uma localização
central e ele oferece a você acesso aos seus objetos pela lista de adição de produtos. Isto lhe

68
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

oferece abilidade para construir serviços globais e torná-los disponíveis através de uma parte
padrão da interface de gerenciamento do Zope. Em outras palavras, um Produto lhe permite
personalizar o Zope.
Comecemos indo até a pasta Products no Control Panel. Para criar um novo Produto, clique
no botão Add Product no folder Product Management (Gerenciamento de Produtos). Isto irá levar
você ao formulário de adição de Produtos. Digite o id "siteExhibit"e clique em Generate. Você
verá agora seu novo Produto no Product Management. Ele deve ser uma caixa azul com a tampa
aberta. A tampa aberta significa que você pode clicar no Produto e gerenciá-lo pela web.
Selecione o Produto siteExhibit. Isto o levará a tela de gerenciamento de Produtos.
A tela de gerenciamento de um Produto se parece e funciona como como a de um Folder
exceto por algumas diferenças:

1. Há uma nova aba, chamada Distribution, bem a direita. Isto lhe dá a abilidade de empacotar
e distribuir seu Produto.
2. Se você selecionar a lista de adição, você verá alguns tipos novos de objetos que você pode
adicionar incluindo ZClass, Factory, e Permission.
3. A pasta com uma interrogação é a Help Folder (Pasta de Adjuda) do Produto siteExhibit.
Esta pasta pode conter Help Topics (Tópicos de Ajuda) que ensina as pessoas como usar
seu Produto.
4. Há também uma nova aba Define Permissions (Definir Permissões) que define as permis-
sões associadas com este Produto. Isto é avançado e não é necessário para este exemplo.

Na aba Contents crie um DTML Method chamado hello com este conteúdo:

<dtml-var standard_html_header>
<h2>Hello from the site Exhibit Product</h2>
<dtml-var standard_html_footer>
Este método lhe permitirá testar seu produto. Depois crie uma Factory. Selecione Zope Fac-
tory da lista de adição de produtos.
Factories criam uma ponte entre a lista de adição de produtos e o seu Produto. Dê a sua
Factory o id myFactory. No campo Add list name digite Hello e na seleção Methods, escolha
hello. Agora clique Generate. Agora clique na nova Factory e mude a Permission (Permissão)
para Add Documents, Images e Files e clique em Save Changes. Isto avisa ao Zope que você
deve ter a permissão para Adicionar documentos, Imagens e Arquivos para utilizar a Factory.
Parabéns, você personalizou a interface de gerenciamento do Zope. Vá para a pasta raiz e clique
na lista de adição de produtos. Note que agora ele inclui uma entrada chamada Hello. Escolha
Hello da lista de adição de produtos. Ele chama seu método hello.
Uma das coisas mais comuns para se fazer com métodos que você linka com factories é
copiar objetos na pasta atual. Em outras palavras seus métodos podem acessar a localização da
qual eles foram chamados e podem executar operações naquela pasta incluindo copiar objetos
dentro dela. Em geral, as pessoas esperam que quando elas selecionam alguma coisa da lista
de adição de produtos elas serão levadas a um formulário de adição onde especifica o id de um
novo objeto. Então elas esperam que quando cliquem em Add o novo objeto com o id que eles
especificaram seja criado em sua pasta. Veremos como realizar estas expectativas.
Primeiro crie uma nova pasta chamada exhibitTemplate no seu Produto. Isto irá servir como
um modelo para as exibições. Também na pasta Produto crie um DTML Method chamado add-
Form, e um Script Python chamado add. Estes objetos criarão novas instâncias de exibição.

69
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

Agora volte para sua Factory e mude-a de modo que o Add list name seja site Exhibit e o método
seja addForm.
Então o que vai acontecer é que quando alguém escolhe site Exhibit da lista de adição de
produtos, o método addForm será executado. Este método deveria coletar informações sobre
o id e o título da exibição. Quando o usuário clica em Add ele deveria chamar o script que irá
copiar o folder exhibitTemplate dentro da pasta chamada e o renomeará para ter o id específico.
O próximo passo é editar o método addForm para ter este conteúdo:

<dtml-var manage_page_header>

<h2>Add a site Exhibit</h2>

<form action="add" method="post"> id <input type="text" name="id"><br> title <input type="tex

<dtml-var manage_page_footer>

Reconhecidamente este é um formulário de adição particularmente "frio". Ele não coleta


muitos dados e não informa ao usuário o que é uma Exibição do site e por quê eles querem
adicionar uma. Quando você criar sua própria aplicação web você vai querer fazer melhor do que
este exemplo.
Note que este método não inclui o cabeçalho e rodapé padrão do HTML. Pela convenção
Zope, telas de gerenciamento não usam os mesmos cabeçalhos e rodapés que seu site usa. Ao
invés disso as telas de gerenciamento usam manage_page_header e manage_page_footer. O
cabeçalho e rodapé visualizados no gerenciamento asseguram que a visualização do gerencia-
mento tenha uma aparência e sentido comum.
Note também que a ação do formulário é o script adicionar. Agora cole o seguinte corpo no
script adicionar:

## Script (Python) "add" ##parameters=id, title, REQUEST=Nome ##

" " " Copie o modelo de exibição para a pasta chamada " " "

#Clone o modelo, dando-lhe o novo id. Isto será colocado #no contexto atual (o lugar de onde

# Mude o título do clone exhibit.manage_changeProperties (title=title)


# Se nós somos chamados através da web, redirecione devolta para o contexto
if REQUEST is not None:
try: u=context.DestinationURL()
except: u=REQUEST ['URL1'] REQUEST.RESPONSE.redirect (u+/manage_main?update_menu=1)

Este script clona o exhibitTemplate e copia-o para a pasta atual com o id específico. Então
ele muda a propriedade título da nova exibição. Finalmente ele retorna para a tela principal de
gerenciamento de pastas pela chamada manage_main.
Parabéns, você agora estendeu o Zope pela criação de um novo produto. Você criou uma ma-
neira de copiar objetos no Zope através da lista de adição de produtos. No entanto, esta solução
ainda sofre alguns problemas. Mesmo que você possa editar o modelo de exibição em um lugar
centralizado, ele ainda é somente um modelo. Então se você adicionar uma nova propriedade
ao modelo, ele não afetará a qualquer das exibições existentes. Para mudar exibições existentes
você terá que modificar cada uma manualmente.

70
CDTC Centro de Difusão de Tecnologia e Conhecimento Brasil/DF

ZClasses leva você a um passo maior para permitir-lhe a ter um modelo central que define um
novo tipo de objeto, e quando você muda o modelo, todos os objetos desse tipo mudam com ele.
Este modelo central é chamado de ZClass.
ZClasses: são ferramentas que ajudam você a construir novos tipos de objetos no Zope, por
definição uma classe. Uma classe é como ponto de partida para objetos. Quando define uma
classe, você está definindo o que um objeto será quando ele for criado. Uma classe pode definir
métodos, propriedades, e outros atributos.
Os Objetos que você cria de uma certa classe são chamados de instâncias de uma classe.
Por exemplo, há apenas uma classe Pasta, mas você pode ter muitas instancias Pasta em seu
aplicativo.
Instâncias possuem os mesmos métodos e propriedades que suas classes. Se você mudar a
classe, então todas as instâncias refletirão a mudança. Diferente dos modelos que você criou na
última seção, as classes continuam a exercer controle sobre as instâncias. Tenha em mente que
isto somente funciona em uma via, se você mudar uma instância, nenhuma mudança será feita
na classe ou qualquer outra instância.

71

Você também pode gostar