SlideShare uma empresa Scribd logo
1 de 72
Baixar para ler offline
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
Zope
Zope
Zope
Zope
Zope
Zope
Zope
Zope
Zope
Zope
Zope
Zope
Zope
Zope
Zope
Zope
Zope
Zope

Mais conteúdo relacionado

Mais procurados

Apostila cdtc dotproject
Apostila cdtc dotprojectApostila cdtc dotproject
Apostila cdtc dotprojectTiago
 
Screen
ScreenScreen
ScreenTiago
 
Tunelamento
TunelamentoTunelamento
TunelamentoTiago
 
Quanta
QuantaQuanta
QuantaTiago
 
Selinux
SelinuxSelinux
SelinuxTiago
 
Shell script
Shell scriptShell script
Shell scriptTiago
 
Servidor de emails_seguro
Servidor de emails_seguroServidor de emails_seguro
Servidor de emails_seguroTiago
 
Tcl tk
Tcl tkTcl tk
Tcl tkTiago
 
Java applet
Java appletJava applet
Java appletTiago
 
Java swing
Java swingJava swing
Java swingTiago
 
De javaparapython
De javaparapythonDe javaparapython
De javaparapythonTiago
 
Python gtk
Python gtkPython gtk
Python gtkTiago
 
Java awt
Java awtJava awt
Java awtTiago
 

Mais procurados (20)

Apostila cdtc dotproject
Apostila cdtc dotprojectApostila cdtc dotproject
Apostila cdtc dotproject
 
Screen
ScreenScreen
Screen
 
Uml
UmlUml
Uml
 
Tunelamento
TunelamentoTunelamento
Tunelamento
 
Quanta
QuantaQuanta
Quanta
 
Qemu
QemuQemu
Qemu
 
Selinux
SelinuxSelinux
Selinux
 
Xdmcp
XdmcpXdmcp
Xdmcp
 
Shell script
Shell scriptShell script
Shell script
 
Servidor de emails_seguro
Servidor de emails_seguroServidor de emails_seguro
Servidor de emails_seguro
 
Tcl tk
Tcl tkTcl tk
Tcl tk
 
Jspservlets
JspservletsJspservlets
Jspservlets
 
Jdbc
JdbcJdbc
Jdbc
 
Java Basico
Java BasicoJava Basico
Java Basico
 
Java applet
Java appletJava applet
Java applet
 
Java swing
Java swingJava swing
Java swing
 
De javaparapython
De javaparapythonDe javaparapython
De javaparapython
 
J2me
J2meJ2me
J2me
 
Python gtk
Python gtkPython gtk
Python gtk
 
Java awt
Java awtJava awt
Java awt
 

Semelhante a Zope

Monitoramento
MonitoramentoMonitoramento
MonitoramentoTiago
 
Jspservlets
JspservletsJspservlets
JspservletsTiago
 
Postgre sql
Postgre sqlPostgre sql
Postgre sqlTiago
 
Javascript
JavascriptJavascript
JavascriptTiago
 
Java basico
Java basicoJava basico
Java basicoTiago
 
Postfix
PostfixPostfix
PostfixTiago
 
Open solaris
Open solarisOpen solaris
Open solarisTiago
 
Inst configdebian
Inst configdebianInst configdebian
Inst configdebianTiago
 
Iptables
IptablesIptables
IptablesTiago
 
Nessus
NessusNessus
NessusTiago
 
Instalacao xoops
Instalacao xoopsInstalacao xoops
Instalacao xoopsTiago
 
Planejamento em desenvolvimento_de_sistemas
Planejamento em desenvolvimento_de_sistemasPlanejamento em desenvolvimento_de_sistemas
Planejamento em desenvolvimento_de_sistemasTiago
 
Gerenciadores de boot
Gerenciadores de bootGerenciadores de boot
Gerenciadores de bootTiago
 
Programacao cpp
Programacao cppProgramacao cpp
Programacao cppTiago
 
Programacao gtk
Programacao gtkProgramacao gtk
Programacao gtkTiago
 

Semelhante a Zope (20)

Monitoramento
MonitoramentoMonitoramento
Monitoramento
 
Jspservlets
JspservletsJspservlets
Jspservlets
 
Postgre sql
Postgre sqlPostgre sql
Postgre sql
 
Javascript
JavascriptJavascript
Javascript
 
Java basico
Java basicoJava basico
Java basico
 
Postfix
PostfixPostfix
Postfix
 
Open solaris
Open solarisOpen solaris
Open solaris
 
Horde
HordeHorde
Horde
 
Inst configdebian
Inst configdebianInst configdebian
Inst configdebian
 
Sql
SqlSql
Sql
 
Iptables
IptablesIptables
Iptables
 
Nessus
NessusNessus
Nessus
 
Instalacao xoops
Instalacao xoopsInstalacao xoops
Instalacao xoops
 
Planejamento em desenvolvimento_de_sistemas
Planejamento em desenvolvimento_de_sistemasPlanejamento em desenvolvimento_de_sistemas
Planejamento em desenvolvimento_de_sistemas
 
Gerenciadores de boot
Gerenciadores de bootGerenciadores de boot
Gerenciadores de boot
 
Perl
PerlPerl
Perl
 
Programacao cpp
Programacao cppProgramacao cpp
Programacao cpp
 
Programacao gtk
Programacao gtkProgramacao gtk
Programacao gtk
 
Gimp
GimpGimp
Gimp
 
Livro angular2
Livro angular2Livro angular2
Livro angular2
 

Mais de Tiago

Programacao php moodle
Programacao php moodleProgramacao php moodle
Programacao php moodleTiago
 
6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascalTiago
 
Guia rapido de_pascal
Guia rapido de_pascalGuia rapido de_pascal
Guia rapido de_pascalTiago
 
Python bge
Python bgePython bge
Python bgeTiago
 
Curso python
Curso pythonCurso python
Curso pythonTiago
 
Curso python
Curso pythonCurso python
Curso pythonTiago
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 pythonTiago
 
Threading in c_sharp
Threading in c_sharpThreading in c_sharp
Threading in c_sharpTiago
 
Retirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharpRetirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharpTiago
 
Remover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharpRemover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharpTiago
 
Obter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharpObter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharpTiago
 
Metodo using no_c_sharp
Metodo using no_c_sharpMetodo using no_c_sharp
Metodo using no_c_sharpTiago
 
Introdução ao c# para iniciantes
Introdução ao c# para iniciantesIntrodução ao c# para iniciantes
Introdução ao c# para iniciantesTiago
 
Interfaces windows em c sharp
Interfaces windows em c sharpInterfaces windows em c sharp
Interfaces windows em c sharpTiago
 
Filestream sistema arquivos
Filestream  sistema arquivosFilestream  sistema arquivos
Filestream sistema arquivosTiago
 
Curso linux professor rafael
Curso linux professor rafaelCurso linux professor rafael
Curso linux professor rafaelTiago
 
Curso de shell
Curso de shellCurso de shell
Curso de shellTiago
 
Controle lpt em_c_sharp
Controle lpt em_c_sharpControle lpt em_c_sharp
Controle lpt em_c_sharpTiago
 
Classes csharp
Classes csharpClasses csharp
Classes csharpTiago
 
C# o basico
C#   o basicoC#   o basico
C# o basicoTiago
 

Mais de Tiago (20)

Programacao php moodle
Programacao php moodleProgramacao php moodle
Programacao php moodle
 
6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal6572501 ldp-apostila-de-turbo-pascal
6572501 ldp-apostila-de-turbo-pascal
 
Guia rapido de_pascal
Guia rapido de_pascalGuia rapido de_pascal
Guia rapido de_pascal
 
Python bge
Python bgePython bge
Python bge
 
Curso python
Curso pythonCurso python
Curso python
 
Curso python
Curso pythonCurso python
Curso python
 
Aula 01 python
Aula 01 pythonAula 01 python
Aula 01 python
 
Threading in c_sharp
Threading in c_sharpThreading in c_sharp
Threading in c_sharp
 
Retirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharpRetirar acentos de_determinado_texto_em_c_sharp
Retirar acentos de_determinado_texto_em_c_sharp
 
Remover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharpRemover caracteres especiais_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharp
 
Obter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharpObter ip da_internet_em_c_sharp
Obter ip da_internet_em_c_sharp
 
Metodo using no_c_sharp
Metodo using no_c_sharpMetodo using no_c_sharp
Metodo using no_c_sharp
 
Introdução ao c# para iniciantes
Introdução ao c# para iniciantesIntrodução ao c# para iniciantes
Introdução ao c# para iniciantes
 
Interfaces windows em c sharp
Interfaces windows em c sharpInterfaces windows em c sharp
Interfaces windows em c sharp
 
Filestream sistema arquivos
Filestream  sistema arquivosFilestream  sistema arquivos
Filestream sistema arquivos
 
Curso linux professor rafael
Curso linux professor rafaelCurso linux professor rafael
Curso linux professor rafael
 
Curso de shell
Curso de shellCurso de shell
Curso de shell
 
Controle lpt em_c_sharp
Controle lpt em_c_sharpControle lpt em_c_sharp
Controle lpt em_c_sharp
 
Classes csharp
Classes csharpClasses csharp
Classes csharp
 
C# o basico
C#   o basicoC#   o basico
C# o basico
 

Último

Descrever e planear atividades imersivas estruturadamente
Descrever e planear atividades imersivas estruturadamenteDescrever e planear atividades imersivas estruturadamente
Descrever e planear atividades imersivas estruturadamenteLeonel Morgado
 
análise obra Nós matamos o cão Tinhoso.pdf
análise obra Nós matamos o cão Tinhoso.pdfanálise obra Nós matamos o cão Tinhoso.pdf
análise obra Nós matamos o cão Tinhoso.pdfMaiteFerreira4
 
Conteúdo sobre a formação e expansão persa
Conteúdo sobre a formação e expansão persaConteúdo sobre a formação e expansão persa
Conteúdo sobre a formação e expansão persafelipescherner
 
Geometria para 6 ano retas angulos .docx
Geometria para 6 ano retas angulos .docxGeometria para 6 ano retas angulos .docx
Geometria para 6 ano retas angulos .docxlucivaniaholanda
 
Slides Lição 9, CPAD, Resistindo à Tentação no Caminho, 2Tr24.pptx
Slides Lição 9, CPAD, Resistindo à Tentação no Caminho, 2Tr24.pptxSlides Lição 9, CPAD, Resistindo à Tentação no Caminho, 2Tr24.pptx
Slides Lição 9, CPAD, Resistindo à Tentação no Caminho, 2Tr24.pptxLuizHenriquedeAlmeid6
 
o-homem-que-calculava-malba-tahan-1_123516.pdf
o-homem-que-calculava-malba-tahan-1_123516.pdfo-homem-que-calculava-malba-tahan-1_123516.pdf
o-homem-que-calculava-malba-tahan-1_123516.pdfCarolineNunes80
 
Aula 5 - Fluxo de matéria e energia nos ecossistemas.ppt
Aula 5 - Fluxo de matéria e energia nos ecossistemas.pptAula 5 - Fluxo de matéria e energia nos ecossistemas.ppt
Aula 5 - Fluxo de matéria e energia nos ecossistemas.pptParticular
 
bem estar animal em proteção integrada componente animal
bem estar animal em proteção integrada componente animalbem estar animal em proteção integrada componente animal
bem estar animal em proteção integrada componente animalcarlamgalves5
 
APH- Avaliação de cena , analise geral do ambiente e paciente.
APH- Avaliação de cena , analise geral do ambiente e paciente.APH- Avaliação de cena , analise geral do ambiente e paciente.
APH- Avaliação de cena , analise geral do ambiente e paciente.HandersonFabio
 
Apresentação sobre Robots e processos educativos
Apresentação sobre Robots e processos educativosApresentação sobre Robots e processos educativos
Apresentação sobre Robots e processos educativosFernanda Ledesma
 
Slides Lição 8, Central Gospel, Os 144 Mil Que Não Se Curvarão Ao Anticristo....
Slides Lição 8, Central Gospel, Os 144 Mil Que Não Se Curvarão Ao Anticristo....Slides Lição 8, Central Gospel, Os 144 Mil Que Não Se Curvarão Ao Anticristo....
Slides Lição 8, Central Gospel, Os 144 Mil Que Não Se Curvarão Ao Anticristo....LuizHenriquedeAlmeid6
 
Campanha 18 de. Maio laranja dds.pptx
Campanha 18 de.    Maio laranja dds.pptxCampanha 18 de.    Maio laranja dds.pptx
Campanha 18 de. Maio laranja dds.pptxlucioalmeida2702
 
"Nós Propomos! Mobilidade sustentável na Sertã"
"Nós Propomos! Mobilidade sustentável na Sertã""Nós Propomos! Mobilidade sustentável na Sertã"
"Nós Propomos! Mobilidade sustentável na Sertã"Ilda Bicacro
 
Exercícios de Clima no brasil e no mundo.pdf
Exercícios de Clima no brasil e no mundo.pdfExercícios de Clima no brasil e no mundo.pdf
Exercícios de Clima no brasil e no mundo.pdfRILTONNOGUEIRADOSSAN
 
CONCORDÂNCIA NOMINAL atividade ensino médio ead.pptx
CONCORDÂNCIA NOMINAL atividade ensino médio  ead.pptxCONCORDÂNCIA NOMINAL atividade ensino médio  ead.pptx
CONCORDÂNCIA NOMINAL atividade ensino médio ead.pptxLuana240603
 
EBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptx
EBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptxEBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptx
EBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptxIlda Bicacro
 
TIPOS DE CALOR CALOR LATENTE E CALOR SENSIVEL.pptx
TIPOS DE CALOR CALOR LATENTE E CALOR SENSIVEL.pptxTIPOS DE CALOR CALOR LATENTE E CALOR SENSIVEL.pptx
TIPOS DE CALOR CALOR LATENTE E CALOR SENSIVEL.pptxMarceloMonteiro213738
 
Meu corpo - Ruth Rocha e Anna Flora livro
Meu corpo - Ruth Rocha e Anna Flora livroMeu corpo - Ruth Rocha e Anna Flora livro
Meu corpo - Ruth Rocha e Anna Flora livroBrenda Fritz
 
Planejamento 2024 - 1º ano - Matemática 38 a 62.pdf
Planejamento 2024 - 1º ano - Matemática  38 a 62.pdfPlanejamento 2024 - 1º ano - Matemática  38 a 62.pdf
Planejamento 2024 - 1º ano - Matemática 38 a 62.pdfdanielagracia9
 

Último (20)

Descrever e planear atividades imersivas estruturadamente
Descrever e planear atividades imersivas estruturadamenteDescrever e planear atividades imersivas estruturadamente
Descrever e planear atividades imersivas estruturadamente
 
análise obra Nós matamos o cão Tinhoso.pdf
análise obra Nós matamos o cão Tinhoso.pdfanálise obra Nós matamos o cão Tinhoso.pdf
análise obra Nós matamos o cão Tinhoso.pdf
 
Conteúdo sobre a formação e expansão persa
Conteúdo sobre a formação e expansão persaConteúdo sobre a formação e expansão persa
Conteúdo sobre a formação e expansão persa
 
Geometria para 6 ano retas angulos .docx
Geometria para 6 ano retas angulos .docxGeometria para 6 ano retas angulos .docx
Geometria para 6 ano retas angulos .docx
 
Slides Lição 9, CPAD, Resistindo à Tentação no Caminho, 2Tr24.pptx
Slides Lição 9, CPAD, Resistindo à Tentação no Caminho, 2Tr24.pptxSlides Lição 9, CPAD, Resistindo à Tentação no Caminho, 2Tr24.pptx
Slides Lição 9, CPAD, Resistindo à Tentação no Caminho, 2Tr24.pptx
 
o-homem-que-calculava-malba-tahan-1_123516.pdf
o-homem-que-calculava-malba-tahan-1_123516.pdfo-homem-que-calculava-malba-tahan-1_123516.pdf
o-homem-que-calculava-malba-tahan-1_123516.pdf
 
Aula 5 - Fluxo de matéria e energia nos ecossistemas.ppt
Aula 5 - Fluxo de matéria e energia nos ecossistemas.pptAula 5 - Fluxo de matéria e energia nos ecossistemas.ppt
Aula 5 - Fluxo de matéria e energia nos ecossistemas.ppt
 
bem estar animal em proteção integrada componente animal
bem estar animal em proteção integrada componente animalbem estar animal em proteção integrada componente animal
bem estar animal em proteção integrada componente animal
 
APH- Avaliação de cena , analise geral do ambiente e paciente.
APH- Avaliação de cena , analise geral do ambiente e paciente.APH- Avaliação de cena , analise geral do ambiente e paciente.
APH- Avaliação de cena , analise geral do ambiente e paciente.
 
Apresentação sobre Robots e processos educativos
Apresentação sobre Robots e processos educativosApresentação sobre Robots e processos educativos
Apresentação sobre Robots e processos educativos
 
Enunciado_da_Avaliacao_1__Direito_e_Legislacao_Social_(IL60174).pdf
Enunciado_da_Avaliacao_1__Direito_e_Legislacao_Social_(IL60174).pdfEnunciado_da_Avaliacao_1__Direito_e_Legislacao_Social_(IL60174).pdf
Enunciado_da_Avaliacao_1__Direito_e_Legislacao_Social_(IL60174).pdf
 
Slides Lição 8, Central Gospel, Os 144 Mil Que Não Se Curvarão Ao Anticristo....
Slides Lição 8, Central Gospel, Os 144 Mil Que Não Se Curvarão Ao Anticristo....Slides Lição 8, Central Gospel, Os 144 Mil Que Não Se Curvarão Ao Anticristo....
Slides Lição 8, Central Gospel, Os 144 Mil Que Não Se Curvarão Ao Anticristo....
 
Campanha 18 de. Maio laranja dds.pptx
Campanha 18 de.    Maio laranja dds.pptxCampanha 18 de.    Maio laranja dds.pptx
Campanha 18 de. Maio laranja dds.pptx
 
"Nós Propomos! Mobilidade sustentável na Sertã"
"Nós Propomos! Mobilidade sustentável na Sertã""Nós Propomos! Mobilidade sustentável na Sertã"
"Nós Propomos! Mobilidade sustentável na Sertã"
 
Exercícios de Clima no brasil e no mundo.pdf
Exercícios de Clima no brasil e no mundo.pdfExercícios de Clima no brasil e no mundo.pdf
Exercícios de Clima no brasil e no mundo.pdf
 
CONCORDÂNCIA NOMINAL atividade ensino médio ead.pptx
CONCORDÂNCIA NOMINAL atividade ensino médio  ead.pptxCONCORDÂNCIA NOMINAL atividade ensino médio  ead.pptx
CONCORDÂNCIA NOMINAL atividade ensino médio ead.pptx
 
EBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptx
EBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptxEBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptx
EBPAL_Serta_Caminhos do Lixo final 9ºD (1).pptx
 
TIPOS DE CALOR CALOR LATENTE E CALOR SENSIVEL.pptx
TIPOS DE CALOR CALOR LATENTE E CALOR SENSIVEL.pptxTIPOS DE CALOR CALOR LATENTE E CALOR SENSIVEL.pptx
TIPOS DE CALOR CALOR LATENTE E CALOR SENSIVEL.pptx
 
Meu corpo - Ruth Rocha e Anna Flora livro
Meu corpo - Ruth Rocha e Anna Flora livroMeu corpo - Ruth Rocha e Anna Flora livro
Meu corpo - Ruth Rocha e Anna Flora livro
 
Planejamento 2024 - 1º ano - Matemática 38 a 62.pdf
Planejamento 2024 - 1º ano - Matemática  38 a 62.pdfPlanejamento 2024 - 1º ano - Matemática  38 a 62.pdf
Planejamento 2024 - 1º ano - Matemática 38 a 62.pdf
 

Zope

  • 2. 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
  • 3. 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
  • 4. Parte I Sobre essa Apostila 3
  • 5. 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
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. 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
  • 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 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
  • 14. 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
  • 15. 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
  • 16. 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
  • 17. 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
  • 18. 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
  • 19. 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
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. 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
  • 29. 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
  • 30. 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
  • 31. 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
  • 32. 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
  • 33. 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
  • 34. 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
  • 35. 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
  • 36. 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
  • 37. 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
  • 38. 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
  • 39. 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
  • 40. 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
  • 41. 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
  • 42. 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
  • 43. 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
  • 44. 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
  • 45. 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
  • 46. 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
  • 47. 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
  • 48. 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
  • 49. 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
  • 50. 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
  • 51. 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
  • 52. 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
  • 53. 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
  • 54. 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