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,
standardhtml_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

Zope

  • 1.
  • 2.
    Sumário I Sobre essaApostila 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
  • 3.
    CDTC Centro deDifusã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
  • 4.
  • 5.
    CDTC Centro deDifusã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
  • 6.
  • 7.
    CDTC Centro deDifusã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
  • 8.
    CDTC Centro deDifusã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
  • 9.
    CDTC Centro deDifusã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
  • 10.
    CDTC Centro deDifusã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
  • 11.
  • 12.
    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
  • 13.
    Capítulo 2 Plano deensino 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
  • 14.
    CDTC Centro deDifusã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
  • 15.
    CDTC Centro deDifusã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
  • 16.
    Capítulo 3 Introdução 3.1 Introduçãoao 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
  • 17.
    CDTC Centro deDifusã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
  • 18.
    CDTC Centro deDifusã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
  • 19.
    Capítulo 4 Interface deGerenciamento 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
  • 20.
    CDTC Centro deDifusã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
  • 21.
    CDTC Centro deDifusã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
  • 22.
    CDTC Centro deDifusã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
  • 23.
    CDTC Centro deDifusã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
  • 24.
    Capítulo 5 Trabalhando comObjetos 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
  • 25.
    CDTC Centro deDifusã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
  • 26.
    CDTC Centro deDifusã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, standardhtml_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
  • 27.
    CDTC Centro deDifusã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
  • 28.
    CDTC Centro deDifusã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
  • 29.
    CDTC Centro deDifusã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
  • 30.
    CDTC Centro deDifusã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
  • 31.
    CDTC Centro deDifusã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
  • 32.
    Capítulo 6 DTML 6.1 DTML DocumentTemplate 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
  • 33.
    CDTC Centro deDifusã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
  • 34.
    CDTC Centro deDifusã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
  • 35.
    CDTC Centro deDifusã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
  • 36.
    CDTC Centro deDifusã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
  • 37.
    CDTC Centro deDifusã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
  • 38.
    CDTC Centro deDifusã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
  • 39.
    CDTC Centro deDifusã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
  • 40.
    Capítulo 7 Modelos dePá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
  • 41.
    CDTC Centro deDifusã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
  • 42.
    CDTC Centro deDifusã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
  • 43.
    CDTC Centro deDifusã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
  • 44.
    Capítulo 8 Aplicações Básicas 8.1Construindo 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
  • 45.
    CDTC Centro deDifusã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
  • 46.
    CDTC Centro deDifusã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
  • 47.
    CDTC Centro deDifusã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
  • 48.
    Capítulo 9 Usuários eSeguranç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
  • 49.
    CDTC Centro deDifusã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
  • 50.
    CDTC Centro deDifusã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
  • 51.
    CDTC Centro deDifusã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
  • 52.
    CDTC Centro deDifusã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
  • 53.
    Capítulo 10 ZCatalog 10.1 ZCatalog OCatalog é 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
  • 54.
    CDTC Centro deDifusã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
  • 55.
    CDTC Centro deDifusã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
  • 56.
    CDTC Centro deDifusã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
  • 57.
    CDTC Centro deDifusã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
  • 58.
    Capítulo 11 Banco deDados 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
  • 59.
    CDTC Centro deDifusã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
  • 60.
    CDTC Centro deDifusã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
  • 61.
    CDTC Centro deDifusã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
  • 62.
    CDTC Centro deDifusã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
  • 63.
    CDTC Centro deDifusã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
  • 64.
    CDTC Centro deDifusã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
  • 65.
    Capítulo 12 ZEO 12.1 Introdução Quandoum 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
  • 66.
    CDTC Centro deDifusã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
  • 67.
    CDTC Centro deDifusã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
  • 68.
    CDTC Centro deDifusã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
  • 69.
    Capítulo 13 Extendendo oZope 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
  • 70.
    CDTC Centro deDifusã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
  • 71.
    CDTC Centro deDifusã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
  • 72.
    CDTC Centro deDifusã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