Você está na página 1de 121

Fundamentos do Zope 1

Fundamentos do Zope

Material produzido pela Equipe STC do
Programa Interlegis

Fundamentos do Zope 2
Fundamentos do Zope
Este captulo introduz o uso do Zope para desenvolvimento Web, como servidor de
aplicaes e gerenciador de contedo Web.

1.1 Web Applications
A World Wide Web (WWW) j no mais uma coleo de pginas estticas, ela se
tornou um grande meio para o transporte de vrios servios. Nesses servios incluem
base de dados, mecanismos de busca, softwares, portais, etc. Alguns destes servios so
considerados Web Applications porque necessitam de apenas de um navegador para
serem acessados e utilizados.
A alta complexidade de algumas Web Applications tornou os recursos oferecidos pela
tradicional programao CGI (Commom Gateway Interface) insuficientes ou inadequados,
assim fez-se necessrio a criao de tecnologias alternativas como ColdFusion, J SP,
ASP, PHP e outras para tornar a criao de Web Applications mais fcil e rpida.
So vrias as vantagens oferecidas pelo Zope aos desenvolvedores de Web
Applications, dentre elas podemos destacar:
O Zope possui um servidor web e um servidor de banco de dados orientado a
objetos integrados.
O Zope orientado a objetos.
O Zope pode se conectar a servidores de banco de dados relacionais tais como:
Oracle, MySQL, MSSQL e PostgreSQL.
O Zope permite o desenvolvimento de sistemas via Web utilizando apenas o
Navegador.
O Zope possui cdigo aberto e livre com licena de uso extremamente flexvel.
O Zope possui total integrao com a linguagem orientada a objetos Python o
que lhe implementa alto poder de cdificao.
DTML, a linguagem de script do Zope, permite a codificao rpida e eficaz.
A nova linguagem de script, ZPT, segue a sintaxe XML e permite a criao de
modelos de pginas para apresentao, alm de possibilitar a edio de
cdigo Zope na maioria dos editores de HTML.

1.2 O que o Zope ?
Fundamentos do Zope 3
1.2.1 Um Servidor de Aplicaes WEB
Um servidor de aplicaes Web funciona como uma ponte entre o navegador, os
softwares de aplicaes e o banco de dados. O Zope, como servidor de aplicaes,
funciona como essa ponte provendo a base para o desenvolvimento de aplicaes Web,
possibilitando ao desenvolvedor misturar HTML, DTML, SQL, Python e outras tecnologias
no desenvolvimento de aplicaes.

1.2.2 Um Servidor de Gerenciamento de Contedo
O Zope oferece a estrutura bsica para prover um sistema de gerenciamento de
contedo, onde uma organizao pode fornecer a seus usurios a possibilidade de
publicar e gerenciar contedo particular.

1.3 Instalao
1.3.1 Requisitos
Atualmente a instalao do Zope no necessita de grande quantidade de recursos, o
arquivo de instalao para Windows possui, aproximadamente, 5MB e para Linux,
aproximadamente, 3MB. Comparado com outros servidores de aplicao Web, o Zope
requer poucos recursos sendo que um Pentiun II com 128MB de RAM suficiente para
utilizao dos seus recursos. O Zope executa em sistemas Windows 95 e superiores e
sistemas Linux e Solaris.
1.3.2 Windows
No Windows, a instalao feita a partir de um executvel que pode ser obtido em
www.zope.org, a partir da execuo do mesmo a instalao iniciada (figura 1.1 e 1.2) e
o primeiro passo escolher o nome para a sua instalao (figura 1.3).

Fundamentos do Zope 4

Figura 1.1 Tela de boas vindas da instalao do Zope.



Fundamentos do Zope 5
Figura 1.2 Tela de licena de uso do Zope.



Figura 1.3 Escolha do nome da instalao do Zope.

Aps a escolha do nome da instalao selecione o diretrio em que voc deseja
instalar o Zope (figura 1.4). Ser perguntado ento, o nome e senha do administrador
inicial (figura 1.5) como sugesto escreva admin no dois campos; caso escolha outros
valores lembre-se deles, pois sero utis para que voc possa trabalhar com o Zope. Se
estiver instalando o Zope em um sistema Windows NT ou Windows 2000 ser
apresentada a opo de iniciar o Zope como um servio do Windows, caso deseje isto,
marque esta opo(figura 1.6). Se voc estiver instalando o Zope sob o Windows 95 ou
superior dever iniciar o Zope manualmente executando o arquivo start.bat localizado no
diretrio de instalao do Zope, assim o Zope ser iniciado e por padro o Zope estar
acessvel atravs da URL http://localhost:8080 ou http://127.0.0.1:8080/ que dever ser
digitada no seu navegador de preferncia.

Fundamentos do Zope 6

Figura 1.4 Seleo do diretrio de instalao.



Figura 1.5 Escolha de nome e senha de administrador.
Fundamentos do Zope 7

Figura 1.6 Seleo de modo de inicializao do Zope.
Para utilizar o Zope, v ao diretrio de instalao e execute o arquivo start.bat para
iniciar a execuo do servidor Zope e stop.bat para parar a execuo do servidor.
1.3.3 Linux
A instalao do Zope no linux um pouco mais complicada que a instalao para o
windows, mas nada que assuste. Alis o linux a plataforma aconselhvel para a
instalao do Zope, pois oferece maior robustez e melhor performance alm de ser um
software livre como o caso do Zope.
Em primeiro lugar aconselhado voc possuir o Python 1.5.2 ou maior instalado, mas
se no estiver instalado o Zope, em geral, far esta instalao.
1. Acesse ento, o sistema linux como root (administrador) e no diretrio /usr/local/
crie um diretrio para conter a instalao do Zope, como sugesto coloque ZopeServ
comandos:
cd /usr/local
mkdir ZopeServ
2. Obtenha o arquivo para instalao em www.zope.org.
Zope-2.4.3-linux2-x86.tgz(ou verso superior)
O arquivo estar, provavelmente, no formato .tgz significando que o mesmo est
compactado.
3. Entre no diretrio criado para a instalao do Zope.
cd /usr/local/ZopeServ
4. Descompacte o arquivo de instalao.
tar xzvf Zope-2.4.3-linux2-x86.tgz
O passo anterior criar um diretrio chamado Zope-2.4.3-linux2-x86. no diretrio
Fundamentos do Zope 8
/usr/local/ZopeServ/
5. Mude o nome deste diretrio para ServidorTeste
mv ./Zope-2.4.3-linux2-x86 ./ServidorTeste
6. Instale o Zope
V para o diretrio ServidorTeste e execute o comando:
./install
Aps a execuo aparecer um mensagem semelhante :
creating default inituser file
Note:
The initial user name and password are 'admin'
and 'IQu!9lK6'.
You can change the name and password through the web
interface or using the 'zpasswd.py' script.
Done!
Onde o nome inicial e a senha devem ser memorizados ou anotados, pois sero
necessrios na primeira utilizao do Zope.
7. Inicie o Zope
V para o diretrio ServidorTeste e execute o comando:
./start
Aps a execuo o Servidor estar acessvel atravs da URL: http://localhost:8080
ou http://127.0.0.1:8080/ que dever ser digitada no seu navegador de preferncia.

1.4 Resumo
Neste captulo voc aprendeu como instalar o Zope e como o mesmo poderoso e
til no que se refere ao provimento de aplicaes via Web. No prximo captulo, voc
aprender os conceitos bsicos para o desenvolvimento de aplicaes no Zope.

Fundamentos do Zope 9
2
Iniciando
Neste captulo, voc ser apresentado interface de gerenciamento de objetos do
Zope e aos principais componentes necessrios para iniciar o desenvolvimento de
aplicaes. Voc ver tambm, os principais conceitos relacionados programao
orientada a objetos e aos mais importantes objetos do Zope, tais como: documentos e
mtodos DTML.

2.1 Preparao
Para iniciar o uso do Zope algumas configuraes so necessrias aps a instalao.
1.Inicie o servidor atravs do script start.bat (windows) ou start (linux).
2.Abra o navegador de sua preferncia.
3.Digite http://localhost:8080/ e leia as informaes que sero apresentadas (figura
2.1).
Se desejar acessar diretamente o sistema de administrao digite
http://localhost:8080/manage/ (figura 2.2).
4.Entre o nome e senha apresentados na instalao do sistema.


Figura 2.1 Tela de incio do servidor Zope.


Fundamentos do Zope 10


Figura 2.2 Tela de gerenciamento do Zope.

2.1.1 Criando Contas de Usurios
Aps a visualizao da tela de gerenciamento, crie uma conta para voc, seguindo os
passos:
1.Clique em acl_users (figura 2.3).
2.Em seguida, clique em Add.
3.Entre com o nome de usurio (username) e a senha (password e confirm).
4.Selecione Manager nas opes listadas em Roles.


Figura 2.3 Folder acl_users
2.2 A tela de gerenciamento
Vamos dar uma olhada na tela de gerenciamento do Zope e ver como ela trabalha.
Primeiramente, feche o seu navegador. Agora abra o seu navegador e entre no Zope com
o usurio e senha criados anteriormente, a tela de gerenciamento ser apresentada
(figura 2.4) e nela podemos identificar trs partes.

Fundamentos do Zope 11

Figura 2.4 Tela de gerenciamento apresentada ao usurio do tipo Manager.

A parte esquerda nos mostra a viso hierrquica das pastas (Folders) e outros
objetos containers do Zope (figura 2.5).


Figura 2.5 Viso hierrquica do Zope.

A parte superior informa o usurio corrente e menu de opes de navegao (figura
2.6).


Fundamentos do Zope 12
Figura 2.6 Informaes de usurio e menu de navegao.


A parte direita nos mostra a viso dos objetos de um dado container ou folder, menu
de objetos para adio e nas guias superiores as vrias pginas de gerenciamento do
objeto selecionado (figura 2.7).



Figura 2.7 Guias, objetos e menu de objetos.

2.3 Objetos
Vamos ver agora, como a abordagem de orientao a objetos do Zope.
Mostraremos agora como copiar, criar, remover e renomear objetos no Zope bem como
efetuar outras tarefas bsicas.
2.3.1 Zope e a OOP
A principal caracterstica do Zope o fato dele ser orientado a objetos. A orientao a
objetos um paradigma de programao baseado na idia de que o mundo constitudo
de objetos. Um objeto algo real ou no que possui estado, habilidade de executar aes
e capacidade de se comunicar com outros objetos. Em programao podemos
representar qualquer objeto, real ou no, atravs de propriedades (caractersticas ou
atributos) e mtodos (aes ou funes).
Por exemplo, podemos representar um cd-player atravs de suas caractersticas
como: marca, peso, cor, modelo e etc; e atravs de aes que ele executa: tocar, pausar,
avanar e etc. Assim um cd-player pode ser representado atravs de um objeto com
propriedades e mtodos.
Contudo, se avanarmos um pouco mais, ns veremos que a maioria dos cd-players
possui atributos e mtodos comuns, sendo assim, quando definimos a estrutura de
Fundamentos do Zope 13
atributos e mtodos de um cd-player estamos definindo uma classe que agrupa todos os
cd-players. Assim um objeto cada instncia de uma classe, isto , cada cd-player
existente no mundo um objeto da classe cd-players que definimos anteriormente.
Quando estiver trabalhando com o Zope voc estar, basicamente, trabalhando com
objetos, pois cada folder, mtodo dtml, ou outro objeto criado no Zope ser uma instncia
das classes folder, Dtml Method, e outras classes presentes no Zope.
A seguir, veremos os objetos fundamentais do Zope e suas principais
funcionalidades.
2.3.2 Folders
Um folder (pasta) um objeto que pode conter outros objetos. Para criar um folder v
para o folder onde o novo folder ser criado e selecione Folder no menu Select type to
add (presente no lado direito da tela de gerenciamento) e ento fornea a informao
necessria para a criao do folder (figura 2.8)
Id: Nome pelo qual o Zope identifica o objeto, deve ser nico em um dado folder.
Title: Campo opcional que prov uma descrio detalhada do folder que ajuda na
identificao do mesmo.
Create public interface: Se selecionar esta opo um documento DTML chamado
index_html ser criado dentro do novo folder. Um documento DTML com o
nome index_html o documento padro visualizado pelo usurio quando o
mesmo acessar um folder via navegador.
Create user folder: Selecionando esta opo criar um user folder (folder de
usurio) dentro do qual voc pode definir que usurios tero permisso de
acesso a esse folder e seus objetos.


Figura 2.8 Tela de informaes para adio de um Folder.
Exemplo:
Vamos criar um folder para conter imagens, siga os passos:
1.V para a raiz do Zope (indicado pelo smbolo /) e crie um folder com Id igual a
Imagens, deixe as opes de Public interface e User folder vazias. Se desejar
escreva algo no campo Title.
2.Clique em Add para confirmar (figura 2.9).
3.Clique no novo folder para abr-lo e ento voc ver que o mesmo est vazio
(figura 2.10).
Fundamentos do Zope 14



Figura 2.9 Informaes do folder de imagens.


Figura 2.10 Folder Imagens sem nenhum contedo.

Todos objetos contidos em um folder, tais como imagens e arquivos, so atribudos
ao folder que os contm e se tornam atributos deste folder. Objetos que podem conter
outros objetos, tais como os folders, so chamados de containeres, pois possuem a
funcionalidade de conter outros objetos.
2.3.3 Arquivos
Antes que voc possa trabalhar com imagens e arquivos no Zope, necessrio que
voc os crie. Para criar objeto imagens escolha Image no menu Select type to add, para
todos os outros tipos de arquivos selecione o objeto File.
Voc deve preencher o formulrio (figura 2.11) para cada objeto File ou Image que
voc deseja inserir.
Id: Identificador interno do Zope.
Title: Ttulo opcional.
File: Caminho completo at o arquivo. Use o boto browse para selecionar o
arquivo desejado.

Fundamentos do Zope 15


Figura 2.11 Formulrio de informaes para adio de uma imagem.

Exemplo:
Vamos inserir uma imagem ao folder Imagens:
1.Entre no folder Imagens criado anteriormente.
2.Selecione Image no menu Select type to add....
3.Fornea um Id e um Title para o objeto.
4.Especifique o caminho da imagem ou selecione utilizando o boto browse e
escolha um imagem a ser adicionada.
5.Clique em Add (figura 2.12), para adicionar o objeto ao folder Imagens.


Figura 2.12 Informaes da imagem adicionada.
6.Aps a insero, clique sobre a imagem.
7.Visualize suas propriedades na guia Properties (figura 2.13).





Fundamentos do Zope 16




Figura 2.13 Informaes da guia Properties.
8.Visualize a sua aparncia na guia View (figura 2.14).

Fundamentos do Zope 17
Figura 2.14 Informaes da guia Properties.
2.3.4 Documentos e Mtodos DTML
At agora voc aprendeu como inserir folders, imagens e arquivos em seu servidor
Zope, agora daremos uma olhada em documentos e mtodos DTML, os mais importantes
objetos do Zope. Embora haja alguma semelhana, esses objetos se diferem na forma de
uso e funcionalidade.
DTML (Document Template Markup Language) a linguagem do Zope que permite a
criao de contedo dinmico, assim como scripts ASP e J SP, a DTML possui um
conjunto de tags que permite a criao de pginas dinmicas na WEB. Voc pode utilizar
a DTML tanto em documentos DTML (DTML Documents) como em mtodos DTML
(DTML methods).
Em geral, os documentos DTML so usados para armazenar texto, documentos
complexos e com grande contedo de informao; eles so como pginas web, mas com
a possibilidade de gerao dinmica de contedo.
J os mtodos DTML so usados para a execuo de aes sobre dados e contedo.
Os mtodos DTML, ao contrrio dos documentos DTML, no possuem propriedades
prprias, isto , eles assumem as propriedades do documento que os invocar ou utilizam,
funcionam assim, como uma funo que executa alguma ao. Os mtodos DTML so os
objetos mais indicados para a gerao dinmica de contedo e para criao de
componentes genricos, pois possuem uma funcionalidade maior que os documentos
DTML.
Documentos DTML
Para criar um documento DTML, v ao folder no qual deseja inserir o novo
documento (se possvel utilize o folder Imagens criado anteriormente) e selecione DTML
Document no menu de Select type to add, complete o formulrio (figura 2.14) com as
seguintes informaes:
Id: Identificador interno do Zope.
Title: Ttulo opcional.
File: Insere contedo de um arquivo no documento DTML. Use o boto browse
para selecionar o arquivo desejado.
Add: Clique neste boto para criar o documento DTML. Se desejar criar e j
iniciar a edio do documento clique no boto Add and Edit.

Fundamentos do Zope 18

Figura 2.15 Formulrio de informaes para criao de um documento DTML.

Para editar o documento clique sobre o mesmo e ento surgir a tela de edio com
suas guias de opes. Na guia Edit possvel editar o contedo do documento (figura
2.16) e fazer a carga de arquivos (upload) para o documento DTML. Experimente
visualizar o contedo das outras guias para se familiarizar com informaes que sero
vistas futuramente e colocar o contedo do documento Doc1 de acordo o visto na figura
2.16.


Figura 2.16 Tela de edio de um documento DTML (Doc1).

Mtodos DTML
Fundamentos do Zope 19
Agora, vamos criar um mtodo DTML que define a forma que as figuras contidas no
folder Imagens (criado anteriormente) sero apresentadas.
1.Abra o folder onde voc quer criar o mtodo (se possvel utilize o folder Imagens
criado anteriormente) e selecione DTML Method no menu Select type to add
e ento preencha os campos apresentados (figura 2.17).








Figura 2.17 informaes para a criao de um mtodo DTML.
2.Clique Add and Edit.
3.Substitua o cdigo existente na caixa de texto pelo cdigo apresentado na figura
abaixo (figura 2.18).
4.Clique em Save Changes.
Fundamentos do Zope 20

Figura 2.18 Cdigo fonte do mtodo DTML 1.

5.Clique em View e visualize sua primeira pgina Web criada com o Zope. Ela
dever se parecer com a pgina mostrada na figura abaixo (figura 2.19).

Fundamentos do Zope 21

Figura 2.19 Visualizao da pgina gerada pelo mtodo DTML 1.


2.4 Gerenciamento de Objetos
Vamos aprender como gerenciar os principais objetos vistos neste captulo, ns
veremos como copiar, mover e renomear folder, mtodos DTML, documentos DTML, etc.
Voc pode mudar determinadas propriedades dos objetos inseridos no servidor
Zope. O Id, por exemplo, s pode ser alterado no folder ou container que possui o objeto
atravs do boto Rename. J , a propriedade Title pode ser alterada na prpria guia
Edit do objeto com o uso de sua caixa de texto.
Atravs do boto Copy, Cut e Delete voc pode copiar, recortar e remover
objetos de um folder ou container e atravs do boto Paste colar objetos para um folder
ou container.

2.5 Aquisio de Objetos
O Zope organiza o relacionamento de seus objetos atravs de um mecanismo
chamado aquisio. atravs da aquisiso que o Zope consegue cria uma estrutura
eficiente no tratamento de informao.
A idia da aquisio a seguinte: quando voc coloca um objeto em um folder ou
sub-folders, voc acaba criando uma hierarquia de objetos que o Zope usar para
reconhecer um objeto chamado. Assim, objetos em um folder herdam todas as
propriedades do folder que os contm, criando um conjunto de atributos que o objeto
Fundamentos do Zope 22
pode acessar. A esse conjunto dado o nome de namespace. Em um namespace de
um objeto esto todos os atributos diretamente acessveis a esse objeto.
O Zope monta o namespace de um objeto atravs do mecanismo de aquisio. Por
exemplo, ao criar um documento DTML em um folder, o Zope saber que o namespace
deste objeto o conjunto de todos atributos do prprio objeto mais os atributos de todos
os folders hierarquicamente superiores. Assim, quando um objeto referencia um outro
objeto o Zope procura o objeto referenciado no folder corrente do objeto e na hierarquia
superior at que o encontre.
Caso um objeto deseje referenciar um outro objeto ou um atributo que no est em
seu namespace, ou melhor, em sua hierarquia de mesmo nvel ou superior, ele dever
referenci-lo explicitamente atravs da tag with que ser vista no captulo 4.
Resumo
Neste captulo, as principais guias e botes do Zope se tornaram familiares a voc.
Conceitos fundamentais foram expostos e voc est pronto para se aprofundar no uso do
Zope e comear a desenvolver pequenas aplicaes em Zope atravs de seus objetos e
de sua linguagem, a DTML.
Fundamentos do Zope 23
3
As guias do Zope
Este captulo mostrar como usar as guias do Zope para executar vrias funes
para diferentes tipos de objetos existentes.
3.1 A barra de guias do Zope
A barra de guias do Zope permite o acesso a vrias interfaces que podem ser usadas
para configurar objetos do Zope. As guias e funes disponveis dependem de qual
objeto est selecionado e de quais permisses o usurio corrente possui em relao
ao objeto selecionado.
Veremos agora, as funcionalidades das principais guias.
3.1.1 A guia Contents
Quando voc seleciona um objeto do tipo folder ou outro objeto do tipo container na
tela de gerenciamento, a guia Contents se abre e lhe mostra todos os objetos
daquele folder juntamente com seus Ids e Titles (figura 3.1).


Figura 3.1 A guia Contents
Essa guia permite a voc criar, renomear, copiar, recortar, mover, excluir, importar e
exportar objetos atravs de botes situados na parte inferior da tela, alm de permitir a
adio de objetos atravs de um menu de escolha Select type to add... e um boto
Fundamentos do Zope 24
Add, situados na parte superior da tela de gerenciamento.
3.1.2 A guia Edit
Quando um objeto do tipo no container, ao ser clicado o Zope lhe mostrar a guia
Edit que permitir a edio do contedo dos objetos. Exemplos de objetos no
containeres que podem ser editados so mtodos e documentos DTML, j outros objetos
como: Imagens (Images) ou Arquivos (Files), no podem ser editados sendo permitido
apenas a mudana de Ids, Titles e atualizao do objeto. Portanto, cada objeto
possui diferentes funcionalidades na guia Edit dependendo de seu contedo e tipo.
Clique sobre um documento ou mtodo DTML e a guia Edit aparecer (figura 3.2).
Os botes Taller, Shorter, Wider e Narrower permitem a mudana de tamanho da
caixa de edio de texto, experimente-os e veja o que acontece. Caso voc faa alguma
alterao de contedo clique sobre o boto Save Changes para salvar o contedo
alterado. Caso deseje visualizar as alteraes feitas clique na guia View (descrita a
seguir) e no boto Back de seu navegador para retornar guia Edit.


Figura 3.2 A guia Edit.

3.1.3 A guia View
A guia View permite a visualizao de objetos da forma como os mesmos sero
apresentados pelo navegador (figura 3.3), ela estar disponvel somente para objetos que
podem ser exibidos atravs do navegador, tais como: imagens, mtodos e documentos
DTML e etc.
Fundamentos do Zope 25


Figura 3.3 A guia View.
3.1.4 A guia History
Esta guia aparece somente para documentos e mtodos DTML, scripts e Page
Templates, ela possibilita a visualizao de qualquer modificao feita no objeto
armazenando assim a histria do objeto (figura 3.4). Ela funciona como um controle de
verso possibilitando a comparao entre dois objetos (boto Compare) e ainda a
recuperao de um documento antigo para a verso atual (boto Copy to present).


Figura 3.4 A guia History.
3.1.5 A guia Undo
A guia Undo utilizada para desfazer aes. Na guia Undo possvel visualizar
todas as aes executadas como o objeto (figura 3.5). Caso este objeto seja um folder ou
container sero apresentadas todas as aes executadas para todos os objetos contidos
no folder ou container.
Fundamentos do Zope 26
Nela voc poder desfazer todas aes executadas pelo usurio corrente em uma
ordem de execuo que garanta integridade s aes.

Figura 3.5 A guia Undo
3.1.6 A guia Find
A guia Find (figura 3.6) possibilita uma variedade de pesquisas em objetos do Zope,
ela utilizada para encontrar objetos no Zope. Experimente buscar objetos
selecionando vrias opes de pesquisa para se familiarizar com esta guia.


Figura 3.6 A guia Find

3.1.7 A guia Properties
Lembre-se de que tudo no Zope objeto, assim como objetos possuem propriedades
esta guia permite a voc criar, remover e alterar propriedades para um objeto (Figura 3.7).
Por exemplo, voc possuir um documento DTML que armazene um texto e neste
Fundamentos do Zope 27
documento adicionar propriedades que armazenaro caractersticas deste texto. Assim
voc pode adicionar propriedades como linhas, auto, palavras chaves e outros ao
documento DTML para que o mesmo possa armazenar informaes sobre o texto que
possui.


Figura 3.7 A guia Properties

Cada propriedade adicionada possui um nome, um valor e um tipo. Tipos como
boolean(lgico), date(data), float(real), int(inteiro), string(cadeia de caracteres) e
long(inteiro longo) so auto descritivos, mas existem tipos que cabem uma descrio
mais detalhada
Lines o tipo que produz uma lista de valores. Se desejar usa-lo deixe o
campo Value vazio, pois a incluso de valores ser permitida aps a insero
da propriedade.
Text assim como o tipo string, este tipo consiste em uma cadeia de
caracteres. A diferena consiste no fato de que o tipo Text permite a criao
de texto com mltiplas linhas.
Tokens consiste de uma linha de valores separados por espao. A
funcionalidade do tipo Tokens que ele permite um busca otimizada.
Selection e Multiple Selection o tipo Selection cria uma lista Pull-Down de
valores onde apenas uma pode ser selecionada (no tipo Multiple Selection
permitido a seleo de vrios valores). No campo Value deve-se colocar o
nome de uma propriedade ou mtodo que possui a lista de valores a serem
apresentados.
No deixe de experimentar a criao de propriedades para alguns objetos, pois
atravs do uso e da pesquisa que aprendemos.
3.1.8 A guia Ownership
A guia Ownership permite a configurao de um proprietrio para o objeto. Quando
Fundamentos do Zope 28
voc cria um objeto, o Zope automaticamente o coloca como proprietrio daquele objeto e
atravs desta guia ser possvel dar permisses de propriedade a usurios (veja capitulo
6 para maiores detalhes sobre permisses).


Figura 3.8 A guia Ownership

3.2 O boto Import/Export
O boto Import/Export permite a importao e exportao de objetos Zope. Todos os
objetos criados no Zope so armazenados em uma base de dados que se encontra no
arquivo data.fs no diretrio var dentro do diretrio de instalao do Zope. Para trocar
objetos entre servidores Zope necessrio a exportao e conseqente importao dos
objetos desejados em arquivos.
Para exportar um objeto, selecione-o e clique no boto Import/Export e ento selecione
se a exportao se dar no servidor (Save to file on server) ou na mquina local
(Download to local machine) e se o formato se dar em XML (figura 3.9). Se voc no
sabe o que XML no deixe de pesquisar, pois o XML (eXtensible Markup Language)
tem se tornado o formato padro para o intercmbio de informao entre aplicaes.
Bem, voltando, aps a seleo das opes acima clique no boto Export e ento o
arquivo ser criado no servidor ou mquina local e no formato desejado. Caso voc no
tenha escolhido o formato XML um arquivo no formato .zexp ser criado, este arquivo
extremamente menor do que o formato XML, porm ele um formato interno do Zope que
no possui a mesma flexibilidade do formato XML.

Fundamentos do Zope 29

Figura 3.9 Importao e Exportao de um objeto.

Para importar um objeto, voc deve informar o caminho completo do arquivo em sua
mquina local e escolher entre se tornar proprietrio (Take ownership of imported objects)
ou manter as propriedades originais (Retain existing ownership information).
3.3 O link Help
Como cantavam os Beatles, Help, I need somebody. Em todos os softwares que
utilizamos h momentos em que necessitamos de ajuda. O Zope possui uma ajuda
poderosa, s que em ingls, mas vale pena quando voc estiver com dvida sobre
alguma funcionalidade clicar no link Help localizado no canto superior direito das telas
do Zope. Esse link trar informaes sobre o tpico corrente alm de uma rvore de
opes para seleo e pesquisa de assuntos (figura 3.10). Para aqueles em que o ingls
no problema acredito ser o Help uma tima fonte de conhecimento.






Fundamentos do Zope 30

Figura 3.10 O Help do Zope.

3.4 O painel de controle do Zope
O Zope possuir um folder especial chamado Control Panel (Painel de Controle), este
folder est localizado abaixo do folder Root e possui informaes sobre o servidor Zope
(figura 3.11).


Figura 3.11 Tela inicial do Painel de Controle.
Fundamentos do Zope 31

3.4.1 O boto Shutdown
Este boto permite voc parar o servidor Zope sendo que o acesso ao servidor estar
disponvel somente aps nova inicializao. Seja cuidadoso ao usar este boto, pois se
algum usurio estiver utilizando o Zope e possuir contedo no salvo, estas informaes
sero perdidas.
3.4.2 O boto Restart
Este boto estar visvel para instalaes executando como um servio Win32 do
Windows ou como um daemon no Unix ou Linux. Ele permite que o servidor seja
desligado e imediatamente reiniciado. Como o anterior deve ser utilizado com cautela.
3.4.3 Database Management
Esta opo possibilitar a configurao da base de dados do Zope, atravs de guias
(figura 3.12) possvel configurar parmetros de cache e do banco de dados. A principal
opo de gerenciamento da base de dados a opo Pack que permite que voc
discarte a histria de objetos mais velhos que o nmero de dias selecionados. Assim a
base de dados se tornar menor e seu desempenho ser otimizado. aconselhvel que
utilize esta opo toda vez que observar que seu arquivo Data.fs esta grande demais e
que existem muitos objetos na guia History e Undo.


Figura 3.12 Guias do Database Management.

3.4.4 Version Management
O Zope possui um controle de verso que permite que voc execute tarefas que no
estaro acessveis a outros usurios do Zope enquanto voc ainda no finalizou o
trabalho. Assim ao final essas modificaes sero disponibilizadas todas de uma nica
vez (veja Captulo 5 para maiores detalhes).
3.4.5 Product Management
A tela de gerenciamento de produtos possibilita a visualizao de todos os produtos
instalados no Zope (figura 3.13). O gerenciamento de produtos est fora do escopo desta
obra, sendo que maiores informaes podem ser obtidas em futuros lanamentos por esta
editora ou pelo site www.zope.org.

Fundamentos do Zope 32



Figura 3.13 Guias de Product Management

3.4.6 Debugging information
A tela de depurao do Zope permite a visualizao de informao que o ajudaram a
encontrar e reparar erros de execuo do servidor Zope. Este mais um tpico avanado
que est fora do alcance desta obra e que ser abordado em obras futuras, maiores
informaes sobre este tpico podem ser obtidas em futuros lanamentos desta editora
ou pelo site www.zope.org.
3.4.7 WebDAV Lock Manager
Esta tela permite a visualizao e gerenciamento dos objetos que esto bloqueados
pelo protocolo WebDAV. Este outro tpico que foge ao escopo desta obra, maiores
informaes no site www.zope.org ou em outras obras sobre o assunto.
Resumo
Neste captulo voc se familiarizou com as principais funcionalidades de administrao
e configurao do Zope. No prximo captulo voc ver detalhes sobre a linguagem de
script do Zope, a DTML. ela que propiciar a voc a criao de contedo dinmico em
web sites atravs do Zope. Lembre-se que a prtica leva ao conhecimento, portanto
destine algumas horas para reviso e uso dos conceitos aprendidos at esse momento.
Fundamentos do Zope 33
4
A linguagem DTML
Neste captulo voc aprender os conceitos bsicos da linguagem DTML.
Explicaremos o conceito de camadas, namespace e variveis no Zope. Este o
principal captulo para que voc comece a produzir contedo dinmico a partir do
servidor Zope.
4.1 Fundamentos
O servidor Zope possui trs nveis ou camadas de desenvolvimento. Na primeira
camada esto todos os cdigos fontes do Zope bem como todas as modificaes ou
expanses do servidor que foram construdas atravs da linguagem Python (linguagem na
qual o Zope foi construdo), as expanses so em geral chamadas de produtos e em geral
adicionam alguma funcionalidade ao Zope.
Na segunda camada do Zope esto as telas de gerenciamento. So elas que
permitem a voc o uso e a administrao do servidor Zope.
A terceira camada o que os usurios vem em seus navegadores quando acessam
algum objeto publicado atravs de um servidor Zope. importante salientar o cdigo
DTML editado na segunda camada nunca enviado ao cliente na terceira camada.
O Zope possui o conceito de variveis que se assemelha muito ao conceito
tradicional de algo que possui valor modificvel. No Zope, alm desta viso tradicional,
possvel observar que quaisquer objetos ou propriedades de objetos podem ser usados
como varivel, pois seus valores dependero do contexto que esto inseridos e do valor
atribudo aos mesmos.
4.2 Namespace
Um namespace DTML um objeto que contem nomes de variveis de um objeto,
assim cada objeto possui um namespace contendo todos os nomes de variveis
acessveis pelo objeto bem como os valores associados a essas variveis. O
namespace DTML possui contedo dinmico o que indica que seu contedo pode variar
de objeto para objeto. Os nomes de variveis disponveis no namespace so obtidos
atravs do processo chamado de aquisition (visto no captulo 2). A viso do
namespace semelhante ao de uma pilha de valores onde os valores mais altos da
pilha so aqueles que estiverem mais prximos ao objeto corrente.
Exemplo: Suponha a hierarquia de objetos descrita na figura 4.1.


Fundamentos do Zope 34


Figura 4.1 - Hierarquia dos objetos.

Assim para o objeto example.html a pilha se pareceria com a tabela 4.1
Mas para o objeto Files a pilha do namespace seria com a tabela 4.2.

example.html
example.txt
Files, addFile, getFiles, getLink, getSize, index_html
FileLibrary, GuestBook, Navigation, ShoppingCart, examples.css, index_html
Examples, QuickStart, imagens, man, site
Tabela 4.1 Namespace do objeto example.html.
Isto ocorre porque a pilha construda para cada objeto levando-se em conta sua
posio relativa na rvore hierrquica.

Files
addFile, getFiles, getLink, getSize, index_html
FileLibrary, GuestBook, Navigation, ShoppingCart, examples.css, index_html
Examples, QuickStart, imagens, man, site
Tabela 4.2 Namespace do objeto Files

4.3 A sintaxe do DTML
A linguagem DTML (Document Template Markup Language) fcil de aprender, e
para aqueles familiarizados com a HTML ser como conhecer novas tags. Assim como a
HTML, a DTML segue o conceito de tags para a utilizao de comando, onde tags so
nomes especiais contidos entre os sinais <e >.
Fundamentos do Zope 35
Exemplo de uma tag HTML :
<br>
Exemplo de tag DTML :
<dtml-var ...>
As tags DTML podem ter nenhum ou vrios atributos. Atributos so nomes seguidos
de sinal de igualdade de seus valores entre aspas.
Exemplo:
<dtml-var name=teste>
Alguns atributos no necessitam de valores, assim o sinal de igualdade no
necessrio.
Exemplo:
<dtml-var name=teste capitalize>
Assim capitalize um atributo sem valor.
Algumas tags so ditas vazias (assim como o <br> em HTML e <dtml-var> em
DTML), pois no possuem corpo aps o sinal de >. Porm, outras tags exigem a
necessidade de um corpo (que pode ser vazio) aps a tag de abertura.
Exemplo:
<dtml-if expr=x==y>
<p>
x=y
</p>
</dtml-if>
A tag acima por necessita saber o que fazer caso a condio x=y seja satisfeita,
assim a tag <dtml-if> uma tag no vazia, pois exige a existncia de um corpo e que a
mesma seja fechada com </dtml-if>. As tags no vazias possuem tags de fechamento que
seguem o padro da HTML, isto , se a tag se abre com <dtml-xxx>ela se fechar com
</dtml-xxx>.
4.4 Tags e mais Tags
Mostraremos agora as principais tags que voc usar para construir contedo
dinmico no Zope atravs da DTML.
4.4.1 A tag var
A tag var insere a representao textual de uma varivel (lembre-se que a varivel
pode ser um objeto ou propriedade) em um documento ou mtodo DTML. Lembre-se que
o contedo gerado textual assim se voc inserir um objeto imagem, o contedo gerado
a forma textual de representar a imagem no HTML.
Exemplo:
Suponha que voc inseriu um objeto imagem do logotipo da sua empresa na raiz do Zope e o nome do
objeto Logotipo. Se voc utilizar a tag <dtml-var name=Logotipo>em um documento ou mtodo DTML
o contedo gerado ser:
<img src=http://localhost:8080/Logotipo width=100 heigth=50 border=0>
Fundamentos do Zope 36
Isto ser interpretado corretamente por um navegador web, mas poder causar
transtornos em um dispositivo mvel ou outro cliente, pois o texto ser enviado para o
mesmo e no ser interpretado corretamente.
Alguns atributos da tag var:
name
Atributo opcional que especfica a varivel a ser inserida.
expr
Usado para avaliar expresses complexas.
html_quote
Converte caracteres que tm significado especial em HTML para cdigo HTML de
exibio.
missing=string
Especifica um valor caso o Zope no possa achar a varivel.
fmt=string
Formata uma varivel. Zope prov alguns formatos embutidos:
whole-dollars: Formata a varivel em dlares.
dollars-and-cents: Formata a varivel em dlares e centavos.
collection-length: Retorna o comprimento da varivel.
structured-text: Formata a varivel como Texto Estruturado. Para mais informao
consulte o Help (Ajuda) ou www.zope.org.
null=string
Um valor opcional no caso da varivel ser null.
lower
Letras maisculas so convertidas para minsculas.
upper
Letras minsculas so convertidas para maisculas.
capitalize
Coloca o primeiro caracter maisculo.
url_quote
Caracteres no vlidos em URL so convertidos para caracteres vlidos.
newline_to_br
Converte caracteres de nova linha para a tag <br>em HTML.
size=arg
Trunca a varivel no determinado comprimento, mostrando o valor at aquele
tamanho.
etc=arg
Especifica uma string a ser adicionada ao final da string que for truncada. O valor
Fundamentos do Zope 37
padro ...
Exemplos:
Inserindo uma varivel em um documento:
<dtml-var standard_html_header>
ou
<dtml-var name="standard_html_header">
Limitando o tamanho:
<dtml-var name="cores" size=5>
Inserindo uma varivel link dentro de um HTML uma tag <a>com a sintaxe de
entidade (sintaxe antiga da DTML e deve ser evitada):
<a href ="&dtml-link"; >Link </a>
Sintaxe atual:
<a href ="<dtml-var name-link>">Link </a>.
4.4.2 A tag call
A tag call o deixa chamar um mtodo sem inserir os resultados na sada.
Sintaxe:
<dtml-call name="objeto" ou expr ="Expresso">
Se a tag call usar um objeto, os argumentos so passados automaticamente por
DTML da mesma maneira que a tag var. Se o mtodo especificado em uma
expresso, ento voc tem que passar os argumentos.
Exemplos:
Chamando atravs de name="objeto":
<dtml-call UpdateInfo>
ou
<dtml-call name="UpdateInfo">
Isto chama o objeto UpdateInfo passando argumentos automaticamente.
Chamando atravs de expresso:
<dtml-call expr ="RESPONSE.setHeader ('content-type', ' text/plain ')">
4.4.3 A tag comment
A tag comment permite a voc documentar o seu DTML com comentrios. Voc
tambm pode usar isto para impedir certos comandos do DTML temporariamente para
realizar teste.
Sintaxe:
<dtml-comment>
</dtml-comment>
Entre as tags comment os comandos no so executados e tambm no aparecem
na sada.
Exemplos:
Fundamentos do Zope 38
Documentando em DTML:
<dtml-comment>
Este contedo no executado e no aparece na sada.
</dtml-comment>
ou
<dtml-comment>
Este DTML invlido e no ser executado.
dtml-call someMethod>
</dtml-comment>
4.4.4 A tag if
A tag if permite testar condies e tomar aes diferentes que dependendo do
resultado das condies. A tag if faz o mesmo que o if/elif/else do Python.
Sintaxe:
<dtml-if Objeto ou expr="expresso">
[<dtml-elif Objeto ou expr="expresso">]
...
[<dtml-else>]
</dtml-if>
As tags elif e else so opcionais. Assim, se o objeto ou expresso avaliada for
verdadeira ento o bloco if executado. Seno o bloco elif (se houver) ou else (se
houver) ser executado.
Exemplos:
Testando para uma varivel:
<dtml-if cobrar>
A varivel ou objeto cobrar verdade
</dtml-if>
ou
<dtml-if expr ="num>5">
num maior que cinco
<dtml-elif expr="num<5">
num menor que cinco
<dtml-else>
num cinco
</dtml-if>

4.4.5 A tag unless
A tag unless prov um atalho para testar condies negativas.
Fundamentos do Zope 39
Sintaxe
<dtml-unless Objeto ou expr="expresso">
</dtml-unless>
A tag unless executa aes se a varivel de condio ou expresso for falsa e ento
o bloco contido dentro da tag executado.
Exemplos
Testando uma varivel:
<dtml-unless Teste>
<dtml-call Operacao>
</dtml-unless>
O bloco ser executado se Teste no existe, ou se existe, mas falso.
4.4.6 A tag in
A tag in lhe oferece um poderoso controle de lao ou loop.
Sintaxe:
<dtml-in Varivel de Sequncia ou expr="expresso de sequencia">
[<dtml-else>]
</dtml-in>
O bloco in ser repetido para cada item da varivel de sequncia ou da expresso.
Se no houver nenhum item na varivel de seqncia ou na expresso, o bloco else
(opcional) executado.
Atributos:
mapping
Trabalha com os objetos diretamente ao invs de cpias. Isto permite ter acesso
valores dos objetos mapeados como variveis de DTML.
reverse
Ordem contrria.
sort=string
Ordena a sequncia pelo determinado atributo.
start=int
O nmero do primeiro item a ser mostrado, onde os itens so numerados a partir
de um.
end=int
O nmero do ltimo item a ser mostrado.
size=int
O tamanho do grupo a ser mostrado.
skip_unauthorized
No causa uma exceo se um artigo sem autorizao de acesso encontrado.
Fundamentos do Zope 40
orphan=int
O tamanho de grupo mnimo desejado. Isto controla como as sequncias so geradas
em grupos. Se um grupo menor que o tamanho de orphan ocorrer, ento nenhuma
diviso gerada e um grupo maior de resultados gerado.
Por exemplo, se o tamanho da sequncia for 12, o tamanho de grupo 10 e o
tamanho de rfo 3, ento o resultado um grupo com todos os 12 itens ao invs de
dividir os itens em dois grupos, pois isso resultaria em um grupo menor que o tamanho
orphan. O valor de padro 0 (zero).
overlap=int
O nmero de itens para sobrepor entre os grupos. O padro no overlap.
previous
Volta para o grupo anterior, se houver.
next
Avana para o prximo grupo, se houver.
sort_expr=expression
Ordena a sequncia por um atributo nomeado pelo valor da expresso. Isto lhe
permite ordenar em atributos diferentes.
reverse_expr=expression
Ordena a sequncia por um atributo nomeado pelo valor da expresso de forma
contrria.
Exemplos:
Lao em objetos:
<dtml-in objectValues>
title: <dtml-var title><br>
</dtml-in>
Lao sobre dois conjuntos atravs de ndices:
<dtml-let rows="(1,2,3)" cols="(4,5,6)">
<dtml-in rows prefix="row">
<dtml-in cols prefix="col">
<dtml-var expr="row_item * col_item"><br>
<dtml-if col_end>
<dtml-var expr="col_total_item * row_mean_item">
</dtml-if>
</dtml-in>
</dtml-in>
</dtml-let>
Criando uma tabela colorida:
<table>
Fundamentos do Zope 41
<dtml-in objectValues>
<tr <dtml-if sequence-odd>bgcolor="#EEEEEE"
<dtml-else>bgcolor="#FFFFFF"
</dtml-if>
<td><dtml-var title></td></tr>
</dtml-in>
</table>
Processando grupos
<p>
<dtml-in largeSequence size=10 start=start previous>
<a href="<dtml-var absolute_url>
<dtml-var sequence-query>start=<dtml-var previous-sequence-start-number>">Previous</a>
</dtml-in>
</p>
<dtml-in largeSequence size=10 start=start next>
<a href="<dtml-var absolute_url>
<dtml-var sequence-query>start=<dtml-var next-sequence-start-number>">Next</a>
</dtml-in>
</p>
<p>
<dtml-in largeSequence size=10 start=start>
<dtml-var sequence-item>
</dtml-in>
</p>
4.4.7 A tag with
A tag with coloca um objeto sobre a pilha do DTML namespace. Variveis sero
observadas neste objeto empilhado.
Sintaxe:
<dtml-with Varivel ou expr ="Expresso">
</dtml-with>
Atributos:
only
Limita o namespace de DTML para incluir s o objeto dentro da tag with.
mapping
Indica que a varivel ou expresso um objeto.
Exemplos:
Observando uma varivel no REQUEST:
Fundamentos do Zope 42
<dtml-with PEDIDO only>
<dtml-if id>
<dtml-var id>
<dtml-else>
' id' no estava no pedido.
</dtml-if>
</dtml-with>
Colocando o primeiro objeto no namespace de DTML:
<dtml-with expr =" objectValues () [0]">
Primeiro o id: <dtml-var id>
</dtml-with>
4.4.8 A tag return
A tag return pra a execuo do DTML e devolve os dados. Reflete o comando return
do Python.
Sintaxe:
<dtml-return Varivel ou expr =" ReturnExpression ">
Exemplos:
Devolvendo uma varivel:
<dtml-return result>
Devolvendo um dicionrio de Python:
<dtml-return expr=" {' hi':200, ' lo':5}">

Resumo
Neste captulo voc teve contato com os principais conceitos e sintaxes da
linguagem DTML, no captulo DTML avanado voc aprender um pouco mais sobre a
linguagem DTML, mas agora voc est pronto para desenvolver uma pequena aplicao
usando o Zope.
Fundamentos do Zope 43
5
Uma pequena aplicao em Zope I
Neste captulo criaremos uma pequena aplicao em Zope para o controlar o trmite
de documentos recebidos por uma casa legislativa. Conhecido com sistema de protocolo
esta aplicao cobrir apenas um subconjunto do sistema (ver apndice X). A pequena
aplicao dever apenas controlar os documentos recebidos pela casa legislativa e
possibilitar o seu trmite em diversas sees ou departamentos.
A aplicao se utilizar apenas dos conceitos vistos at o momento neste material.
Assim, o escopo e a funcionalidade da aplicao sero limitados em relao ao caso real.
5.1 O Sistema de Protocolo
Um sistema de protocolo e controle de trmite de documentos caracteriza-se por uma
aplicao ou conjunto de aplicaes que seja capaz de manter registros de protocolo de
entrada, sada e tramitao dos documentos em um rgo ou departamento (ver apndice
X, para maiores detalhes). Este sistema tem escopo variado dependendo do que se quer
protocolar e como se dar o trmite dos documentos protocolados. Neste estudo de caso,
limitaremos o escopo da aplicao a protocolar os chamados Documentos Recebidos,
que so documentos que chegam ao rgo ou departamento responsvel pelo controle
de documentos e, a partir de ento, so tramitados pelos demais departamentos e rgo
competentes.
5.2 A aplicao
A aplicao para o controle de documentos recebidos consistir dos seguintes
documentos:
Uma pgina inicial para escolha de adio ou trmite de um documento.
Um formulrio para incluso de um documento recebido.
Um mtodo DTML para a criao do protocolo.
Um mtodo DTML para a listagem dos documentos disponveis para a tramitao.
Um formulrio para a apresentao do documento escolhido e tramitao do
documento.
Inicialmente, crie na raiz do Zope, um folder chamado "Protocolos". Ele ir conter os
mtodos descritos acima, bem como, os documentos criados atravs do sistema. V para
dentro deste folder e mos obra.
5.2.1A pgina inicial
Voc dever criar um pgina inicial chamada index_html que vai conter os links para
Fundamentos do Zope 44
as funcionalidades da aplicao de protocolo. Como sugesto fizemos a pgina (figura
5.1) com o cdigo abaixo (listagem 5.1).

Figura 5.1 - Pgina Inicial do Sistema de Protocolos.

<html>
<body bgcolor="#ffffff" text="#000000" link="#0000ee" alink="#0000ee" vlink="#551a8b">
<div align="center">
<h1><font color="#000000">Sistema de Protocolo e </font></h1>
<h1><font color="#000000">Tramita&ccedil;&atilde;o de Documentos</font></h1>
<table cellpadding="2" cellspacing="2" border="1" width="100%">
<tbody>
<tr>
<td valign="top" align="center" bgcolor="#ffffff"><font color="#000000">Protocolar<br>
</font></td>
<td valign="top" align="center"><font color="#000000">Tramitar<br>
</font></td>
</tr>
<tr>
<td valign="top"><font color="#000000"><a href="/Protocolos/AddDocRecebidoForm">Documentos
Recebidos</a><br>
</font></td>
<td valign="top"><font color="#000000"> <a href="/Protocolos/DocRecebidos"> Documentos
Recebidos<br>
</font></td>
</tr>
<tr>
<td valign="top"><font color="#000000">Documentos Expedidos<br>
</font></td>
<td valign="top"><font color="#000000">Documentos Expedidos<br>
</font></td>
Fundamentos do Zope 45
</tr>
<tr>
<td valign="top"><font color="#000000">Documentos Internos<br>
</font></td>
<td valign="top"><font color="#000000">Documentos Internos<br>
</font></td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
Listagem 5.1 - HTML da pgina inicial.
5.2.2 Formulrio para adio de documento recebido
O formulrio para adio de documento recebido (figura 5.2) deve solicitar as
informaes necessrias para adio de um documento (listagem 5.2) e ento passar os
dados para um mtodo DTML que adicionar o protocolo.

Figura 5.2 - Formulrio para registro de protocolo.

Fundamentos do Zope 46
<dtml-var standard_html_header>
<dtml-let prot="'R-'+_.str(_.int(ZopeTime().timeTime()))+'-'+_.DateTime().strftime('%Y')"
dat="ZopeTime().strftime('%d/%m/%Y-%H:%M')">
<b>Formulrio de Entrada de Protocolo</b>
<br>
<i>Documentos Recebidos</i>
<form action=AddDocRecebido>
<table>
<tr><td>Nmero do protocolo:</td><td><input type="text" name="NumPro" readonly value=<dtml-var
prot>></td></tr>
<tr><td>Data e hora do protocolo:</td><td><input type="text" name="DatHor" readonly value=<dtml-var
dat>></td></tr>
<tr><td>Nmero do documento:</td><td><input type="text" name="NumDoc"></td></tr>
<tr><td>Data de emisso: </td><td><input type="text" name="DatEmi"></td></tr>
<tr><td>Referncia: </td><td><input type="text" name="Refere"></td></tr>
<tr><td>Origem: </td><td><input type="text" name="Origem"></td></tr>
<tr><td>Tipo do documento: </td><td>
<select name="TipDoc">
<dtml-in Tipo_Documento>
<option value="<dtml-var sequence-item>"><dtml-var sequence-item>
</dtml-in>
</select></td></tr>
<tr><td>Assunto: </td><td><input type="text" name="Assunt"></td></tr>
<tr><td>Quantidade de anexos: </td><td><input type="text" name="QuaAne"></td></tr>
<tr><td>Destino: </td><td><input type="text" name="Destin"></td></tr>
<tr><td>Recebido por: </td><td><input type="text" name="Recebi"></td></tr>
<tr><td>Situacao: </td>
<td>
<select name="Situac">
<dtml-in Situacao>
<option value="<dtml-var sequence-item>"><dtml-var sequence-item>
</dtml-in>
</select>
</td></tr>
<tr><td><input type=reset value=limpar></td><td><input type=submit value=adicionar></td></tr>
</table>
</form>
</dtml-let>
Fundamentos do Zope 47
<dtml-var standard_html_footer>
Listagem 5.2

5.2.3 Mtodo de adio
Um mtodo DTML ser responsvel por receber os dados provindos do formulrio de
adio e realizar a adio do protocolo de documento recebido (listagem 5.3).
<dtml-var standard_html_header>
<dtml-try>
<dtml-call "manage_addFile(id=NumPro)">
<dtml-let file="objectValues('File')[-1]"
tram="DatHor+'-'+'Protocolo Geral'+'-'+Recebi+'-'+Situac">
<dtml-call "file.manage_addProperty(id='NumPro',value=NumPro,type='string')">
<dtml-call "file.manage_addProperty(id='DatHor',value=DatHor,type='string')">
<dtml-call "file.manage_addProperty(id='NumDoc',value=NumDoc,type='string')">
<dtml-call "file.manage_addProperty(id='DatEmi',value=DatEmi,type='string')">
<dtml-call "file.manage_addProperty(id='Refere',value=Refere,type='string')">
<dtml-call "file.manage_addProperty(id='Origem',value=Origem,type='string')">
<dtml-call "file.manage_addProperty(id='TipDoc',value=TipDoc,type='string')">
<dtml-call "file.manage_addProperty(id='Assunt',value=Assunt,type='string')">
<dtml-call "file.manage_addProperty(id='QuaAne',value=QuaAne,type='string')">
<dtml-call "file.manage_addProperty(id='Destin',value=Destin,type='string')">
<dtml-call "file.manage_addProperty(id='Tramite',value=tram,type='lines')">
</dtml-let>
<dtml-except>
<dtml-call "manage_delObjects(ids=NumPro)">
<P>Problemas com a execuo! <br>Tente Novamente!</p>
<a href="index_html">Voltar </a>
<dtml-else>
<p>Insero realizada com sucesso!!</p><br>
<a href="index_html">Voltar </a>
</dtml-try>
<dtml-var standard_html_footer>
Listagem 5.3 - Cdigo para adio de um registro de protocolo.

5.2.4 Lista dos documentos recebidos
Haver um mtodo DTML (listagem 5.4) que listar os documentos recebidos
existentes e possibilitar a seleo de um dos documentos para a tramitao (figura 5.3).
Fundamentos do Zope 48
<dtml-var standard_html_header>
<dtml-let x="objectValues('File')">
<dtml-in x>
<a href="TramDocRecebido?obj=<dtml-var id>"><dtml-var id></a>- <dtml-var Assunt><br>
</dtml-in>
</dtml-let>
<dtml-var standard_html_footer>
Listagem 5.4


Figura 5.3 - Lista dos documentos protocolados.

5.2.5 Formulrio de tramitao
Aps a seleo de um documento na lista de documentos ser mostrado um
formulrio para a adio do trmite do documento (figura 5.4). Este formulrio dever
apresentar as informaes do documento selecionado e possibilitar a adio de um
trmite ao documento (listagem 5.5).
Fundamentos do Zope 49

Figura 5.4 - Formulrio de tramitao de documento.

<dtml-var standard_html_header>
<dtml-if "obj in objectIds('File')">
<dtml-let i="objectIds('File').index(obj)" id="objectValues('File')[i]">
<p>Protocolo:<dtml-var "id.NumPro"></p>
<p>Data e Hora:<dtml-var "id.DatHor"></p>
<p>Nmero do Documento:<dtml-var "id.NumDoc"></p>
<p>Data Emisso:<dtml-var "id.DatEmi"></p>
<p>Referncia:<dtml-var "id.Refere"></p>
<p>Origem:<dtml-var "id.Origem"></p>
<p>Destino:<dtml-var "id.Destin"></p>
<p>Assunto:<dtml-var "id.Assunt"></p>
<p>Quantidade de anexos:<dtml-var "id.QuaAne"></p>
<p >TRAMITAO </p>
Fundamentos do Zope 50
<table >
<th align="center">Data de Recebimento</th>
<th align="center">Destinatrio</th>
<th align="center">Recebido/Encaminhado</th>
<th align="center">Situacao</th>
<dtml-in "id.Tramite">
<tr>
<dtml-let x=sequence-item y="_.string.split(x,'-')">
<td align="center"><dtml-var "y[0]">-<dtml-var "y[1]"></td>
<td align="center"><dtml-var "y[2]"></td>
<td align="center"><dtml-var "y[3]"></td>
<td align="center"><dtml-var "y[4]"></td>
</dtml-let>
</tr>
</dtml-in>
</table>
<p>Encaminhamento</p>
<form action=AddTramite>
<table>
<input type="hidden" name="obj" value=<dtml-var obj>>
<tr><td>Destinatrio:</td><td><input type="text" name="Destin"></td>
<tr><td>Envio:</td><td><input type="text" name="Envio"></td>
<tr><td>
Situao:</td><td><select name="Situac">
<dtml-in Situacao>
<option value="<dtml-var sequence-item>"><dtml-var sequence-item>
</dtml-in>
</select></td>
<tr><td><input type=reset value=limpar></td><td><input type=submit value=adicionar></td></tr>
</table>
</form>
</dtml-let>
</dtml-if>
<dtml-var standard_html_footer>
Listagem 5.5 - Cdigo do formulrio de tramitao.

5.2.6 Mtodo de tramitao
Fundamentos do Zope 51
Um mtodo DTML (listagem 5.6) receber as informaes do formulrio de tramitao
e efetuar a atualizao das informaes do documento protocolado.
<dtml-var standard_html_header>
<dtml-try>
<dtml-let i="objectIds('File').index(obj)" id="objectValues('File')[i]"
tram="ZopeTime().strftime('%d/%m/%Y-%H:%M')+'-'+Destin+'-'+Envio+'-'+Situac">
<dtml-call "id.Tramite.append(tram)">
</dtml-let>
<dtml-except>
<P>Problemas com a execuo! <br>Tente Novamente!</p>
<a href="index_html">Voltar </a>
<dtml-else>
<p>Trmite realizado com sucesso!!</p><br>
<a href="index_html">Voltar </a>
</dtml-try>
<dtml-var standard_html_footer>
Listagem 6.6 - Cdigo para a tramitao de um documento.

Resumo
Este captulo serviu para o desenvolvimento de um pequena aplicao em Zope
utilizando recursos j vistos em captulos anteriores. Atravs dele colocamos em prtica
os conceitos vistos anteriormente alm de explorarmos outras idias e potencialidades do
Zope.

Fundamentos do Zope 52
6
ZClasses
Este captulo ensinar a voc um importante recurso do Zope, as ZClasses. As
ZClasses permitem a voc criar objetos personalizados baseados nos objetos existentes
no Zope, assim voc usar o conceito de derivao da programao orientada a objetos
para criar objetos que atendem sua necessidade de forma mais completa e especfica.
Para criar esses objetos personalizados voc usar uma ZClass que deve descrever
a funcionalidade e a interface do objeto. Atravs das ZClasses um usurio do Zope,
programador ou no, pode criar uma funcionalidade complexa para sua aplicao Zope.
No decorrer deste captulo voc verr como projetar, criar e incorporar ZClasses s
suas aplicaes dentro do Zope, para isso ns criaremos um pequena loja de venda de
CDs, a CD-Agora.
6.1 Por que ZClasses?
ZClasses so classes especiais do Zope que podem ser usadas para descrever
objetos personalizados, tais como: carros, cds, livros, empregados e outros
objetos.Atravs destes objetos personalizados voc poder facilitar o desenvolvimento de
aplicaes on-line como: loja de cds, loja de livros, banco de empregos e empregados,
venda de automveis e etc.
Usando ZClasses voc no tem que saber programar em Python ou ter qualquer
conhecimento especial em programao. Voc dever apenas saber usar o Zope e suas
guias para criar um novo produto e as classes que pertencero quele produto. O uso de
ZClasses permitir a voc distribuir e reutilizar cdigo no Zope de forma eficiente e eficaz.
6.1.1 CD-Agora
A aplicao que vamos desenvolver permitir a voc gerenciar pginas e criar objetos
para vender CDs numa loja hipottica chamada CD-Agora. Atravs de telas de
gerenciamento (figuras 8.x a 8.x), voc poder adicionar, alterar e remover objetos, bem
como definir a forma como os mesmos sero apresentados ao usurio.
6.2 Classes versus Objetos
E se eu lhe perguntasse: Qual a diferena entre classes e objetos? Voc saberia me
responder. Bem, antes de continuarmos alguns conceitos devem estar claros. Uma classe
determina propriedades para seus objetos. Assim, uma ZClass, como uma classe, ir
determinar propriedades para objetos que voc definir.
Exemplo:
1.Uma classe ZClass chamada Zcarro dever definir um conjunto de propriedades
Fundamentos do Zope 53
que os carros possuem ou que voc deseja retratar na classe ZCarro. Assim todo
objeto criado a partir da ZClass ZCarro ter o mesmo conjunto de propriedades.
2. Um classes ZClass chamada ZEmprego dever definir um conjunto de
propriedade a respeito de empregos e que todos os empregos possuem em
comum.
Um objeto criado a partir de uma classe chamado de instncia ou somente objeto,
pois o termo objeto, em geral, j se refere a uma instancia de uma classe. Uma instncia
representa um objeto especfico de uma classe.
Para criar uma classe voc deve seguir os passos:
1.Criar um produto Zope a partir do Control Panel (painel de controle).
2.Criar a ZClass e definir propriedades como Id, Title e Base Classes.
3.Definir as demais propriedades da classe desejada.
4.Definir a guias visuais para a classe.
Exemplo:
Suponha que voc deseja criar uma ZClass chamada Zlivro que define o objeto do tipo
livro. Ento, antes que voc possa criar objetos do tipo livro voc deve se preocupar em
definir as propriedades que um livro possui, como por exemplo: Ttulo, Autor, Nmero de
Pginas, Assunto, Nmero ISBN e etc. Para essas propriedades voc dever definir um
nome, um valor e um tipo de dado. Aps a definio das propriedades voc dever definir
um conjunto de telas de administrao dos objetos atravs de guias.
6.3 Criando um ZClass
Neste tpico ns vamos criar um produto e uma classe nesse produto Zope, para que
voc comece a se familiarizar com o uso de ZClasses. Vamos supor que voc foi
contratado por uma loja de cds para desenvolver uma aplicao web que dever permitir
a comercializao de cds e a administrao do sistema atravs da web.
Aps avaliar as tecnologias existentes tais como ASP, J SP, ColdFusion, Zope e
outras, voc tenha optado por desenvolver esse sistema usando o Zope um servidor de
aplicaes gratuito e poderoso. O primeiro passo ento criar um produto para conter as
classes necessrias aplicao.
1.V ao Control Panel (painel de controle) do Zope (figura 6.3).
2.Clique em Product Management e a lista de produtos disponveis aparecer (figura
6.4).
3.Clique em Add Product para adicionar um novo produto(figura 6.5).
4.No campo Id entre com o nome CdStore e no campo Title entre com Loja de CD
(figura 6.6).
5.Clique no boto Generate e ento na lista de produtos aparecer um novo produto
com o nome CdStore (figura 6.7).




Fundamentos do Zope 54

Figura 6.3 A interface do painel de controle.


Figura 6.4 A interface de gerenciamento de produtos.



Figura 6.5 Adicionando um produto.
Fundamentos do Zope 55



Figura 6.6 Adicionando o produto CdStore.


Figura 6.7 Lista de Produtos com o novo produto CdStore.

Agora que temos um novo produto poderemos adicionar ZClasses ao nosso
produto CdStore. A classe a ser adicionada representar um CD com seus atributos e
mtodos.
Para adicionar uma ZClass ao nosso produto devemos seguir os passos:
1.Clique no produto CdStore para ir para a sua interface de gerenciamento (figura
6.8).
2.Selecione ZClass na lista Select type to add... e a interface de insero de uma
ZClass aparecer.
3.No campo Id coloque CdClass e no campo Name algum texto que descreva a
ZClass, por exemplo: ZClass CD.
4.No campo Meta Type coloque CD. A palavra CD aparecer na lista de objetos
disponveis para insero. O termo meta type representa o tipo de objeto que
Fundamentos do Zope 56
voc est criando. Neste exemplo coloque a palavra CD no campo meta type.
5.Selecione a opo Create constructor objects?.
6.Na lista base class selecione as opes ZCatalog: CatalogAware e ZClasses:
ObjectManager e ento adicione-as lista Selected.
7.Aps a execuo dos passos descritos acima (figura 6.9) clique em Add.

Figura 6.8 Interface de gerenciamento do produto CdStore.


Figura 6.9 Informaes para a insero da ZClass CdClass.
Aps a insero da ZClass ao produto CdStore voc pode verificar que existem
novos objetos dentro do produto (figura 6.10). Vamos explorar cada um destes objetos,
comeando pelo objeto que aparece em primeiro lugar na lista de objetos do produto
CdStore, o objeto CdClass. Este objeto representa a ZClass criada anteriormente e ao
clicar sobre este objeto voc ser levado interface de gerenciamento desta ZClass que
Fundamentos do Zope 57
contm algumas guias (figura 6.11). So elas:
Methods: Nesta guia possivel criar mtodos para a nossa ZClass
CdClass. Atravs da insero de documentos ou mtodos DTML
possvel criar mtodos para visualizar um CD ou mesmo fazer o upload
de suas caractersticas a partir de um arquivo.
Basic: A guia Basic contm informaes sobre as classes bases das quais
a classe corrente derivada, alm de informaes como: Title, Meta
Type, Class Id, Icon Path e Icon Image. O Class Id uma identificao
usada pelo Zope para associar as instncias de objetos esta ZClass. O
Icon Path ou Icon Image so usados para se utilizar uma imagem J PEG
ou GIF para os objetos desta ZClass.
Views: Esta guia permite a criao de Views ou Vises para os objetos da
ZClass. Assim possvel criar interfaces ou telas que possibilitam a
execuo de diversas tarefas atravs de uma interface personalizada.
Property Sheets: Nesta guia feita a descrio das instncias da classe.
Assim possvel criar diferentes instncias para uma mesma classe
dependendo da especializao do problema. Em geral, uma classe ter
uma nica property sheet.
Permissions e Define Permissions: A guia Permissions permite o
gerenciamento das permisses que a Classe e seus objetos possuem.
Subobjects: Usada para definir quais objetos uma instncia da classe pode
conter.
Os outros objetos criados dentro do produto pela ZClass so:
CdClass_add: um mtodo DTML que prov uma estrutura para a criao
de cdigo para a construo de uma instncia (objeto) do tipo CdClass.
CdClass_addForm: mtodo DTML que prov, atravs de um formulrio, o
conjunto bsico de informaes necessrias pelo mtodo construtor
CdClass_add.
CdClass_add_permission: uma permisso Zope para adicionar novas
instncias do tipo CdClass.
CdClass_factory: um objeto do tipo factory que possibilita ao Zope
adicionar uma opo CD ao menu Select type to add... e de invocar o
CdClass_addForm caso o item CD seja selecionado.
6.3.1 Criando Propriedades em uma Folha de Propriedades
Agora que ns temos uma ZClass e entendemos quais so as caractersticas
existentes em uma ZClass, vamos personalizar a nossa ZClass com propriedades
(Properties) criando uma folha de propriedade (Property Sheet). Porm, antes de
iniciarmos faremos uma reflexo respeito de quais propriedades um objeto da classe
CD deve possuir. Esta fase de reflexo muito importante, pois no futuro ela minimizar a
quantidade de mudanas que voc ter que fazer sua aplicao caso uma nova
funcionalidade ou requisito seja descoberto.
Adio, alterao ou remoo das propriedades de uma classe podero ter um
impacto menor ou maior na sua aplicao dependendo da forma como as propriedades
foram criadas.
Fundamentos do Zope 58
Para criamos uma Property Sheet (folha de propriedade) para a nossa CdClass,
siga os seguintes passos:
1.V ao produto CdStore localizado no Control Panel.
2.Clique na classe CdClass.
3.V para a guia Property Sheets.
4.Clique no boto Add Commom Instance Property Sheet.
5.No campo Id digite Propriedades_CD e no campo Title digite Propriedades de um
CD (figura 6.12).
6.Clique Add para criar a Property Sheet Propriedades_CD.


Figura 6.12 Id e Title da Property Sheet para a ZClass CdClass.

Agora voc possui uma folha de propriedades para a ZClass CdClass e dever
adicionar as propriedades da CdClass dentro desta folha. Primeiramente, vamos
relacionar, aps uma reflexo, quais as propriedades a nossa classe ter.
A propriedades levantadas foram:
Ttulo: tipo string que conter o ttulo do CD.
Cantor: tipo string com o nome do cantor, banda ou grupo.
Gravadora: tipo string com o nome da gravadora.
Gnero: tipo selection contendo o gnero (rock, samba, salsa, etc) do CD.
Data_de_Lanamento: tipo date com a data de lanamento do CD.
Preo: tipo float contendo preo sugerido para a venda.
Como voc observou nossa classe CD possui seis propriedades com diferentes
tipos de dados. Alguns destes tipos so bem conhecidos e intuitivos outros nem tanto.
Portanto, veremos agora quais so os tipos de variveis, propriedades e atributos aceitos
pelo Zope.
boolean: permite valores true ou false.
date: um tipo data e hora.
Fundamentos do Zope 59
float: tipo real usado para valores decimais e representao monetria. No
permite valor nulo.
int: inteiro com 32 bits. No permite valor nulo.
lines: lista de texto separados por linha. Cada linha um item da lista.
long: inteiro sem limite.
string: cadeia de caracteres contida em uma nica linha, mas sem limites. Este
o tipo mais usado.
text: texto multilinha.
tokens: lista de strings contida em uma nica linha separadas por espao. til
para armazenar palavras chaves para busca e catlogo.
selection: um tipo string com um conjunto discreto de valores possveis. Deve ser
usado em conjunto com uma lista (lines ou tokens).
multiple selection: o mesmo que um selection com possibilidade de seleo
mltipla.

Vamos, ento, utilizar estes tipos para inserir cada uma das propriedades listadas
para a classe CdClass, para fazer isso clique na property sheet Propriedades_CD e uma
interface para a adio de propriedades ser apresentada (figura 6.13). Nesta interface
iremos adicionar cada uma das propriedades de nossa classe preenchendo o campo
Name com o nome da propriedade e escolhendo o tipo no menu Type alm de informar o
valor padro para as propriedades que no permitem valor nulo.

Figura 6.13 Interface para adio de propriedades.
Fundamentos do Zope 60

Execute os passos a seguir para as propriedades Ttulo, Cantor, Gravadora,
Data_de_Lanamento e Preo.
1.No campo Id coloque o nome da propriedade.
2.Na lista Type selecione o tipo da propriedade.
3.Coloque o valor padro ou deixe o valor vazio (para tipos permitidos).
4.Clique no boto Add.
Deixamos a propriedade Gnero fora da lista inicial propositalmente, pois ela exige
que seja criada um lista de valores. Como vimos anteriormente, o tipo selection deve ser
usado em conjunto com uma lista de valores (lines ou tokens). Para criar esta lista iremos
ao folder raiz e na guia Properties criaremos uma propriedade chamada, por exemplo,
Gneros. Para isto seguiremos os seguintes passos:
1.V raiz do Zope.
2.Clique na guia Properties.
3.No campo Name digite Gneros e na lista Type selecione Lines.
4.Clique em Add.


Figura 6.14 Propriedade Gneros do tipo Lines.

Aparecer, ento na lista de propriedades um caixa de texto para uma propriedade
chamada Gneros, acrescente nesta caixa de texto todos os gneros musicais desejados
(figura 6.14).
Volte guia de edio de propriedades dentro da ZClass CdClass e adicione mais
uma propriedade chamada Gnero e que seja do tipo Selection e no campo value digite
Gneros e clique no boto Add para que as propriedades da sua CdClass fiquem com as
Fundamentos do Zope 61
propriedades desejadas (figura 6.15).



Figura 6.15 Propriedades finais de CdClass.

6.3.2Vises
Agora que ns criamos as propriedades desejadas para a classe CdClass
interessante que sejam geradas vises sobre essas propriedades. As vises so
importantes para que gerentes de contedo e administradores de aplicao possam
visualizar e editar propriedades dos objetos de uma determinada classe. Assim, o Zope
permite, atravs da guia Views dentro da ZClass CdClass, a criao de vises(views).
Vamos criar uma view chamada Propriedades para a CdClass. Siga os seguintes passos:
1.V para a guia Views dentro da ZClass CdClass.
2.No campo Name escreva Propriedades.
3.No menu Method selecione propertysheets/Propriedades_CD/manage.
4.Clique em Add.
Aps a insero a guia Views conter duas vises (figura 6.16), sendo que uma
delas a view Propriedades que voc acabou de gerar.

Fundamentos do Zope 62

Figura 6.16 A guia Views com a view Propriedades.

6.3.3Criando Ajuda para a sua ZClass
Voc pode criar tpicos de ajuda para as Views disponveis para a sua ZClass.
Assim, uma View pode possuir um tpico de ajuda (Help) associado a ela e acessvel
atravs de um clique na interface da View.
Para criar um tpico de ajuda v at o produto CdStore e siga os seguintes passos:
1.Clique no objeto Help.
2.No menu Select type to add... escolha Help Topic e Clique em Add.
3.No campo Id entre com a palavra Descricao e no campo Title entre com
Descrio de um CD.
4.Clique em Add.
Aparecer na guia Contents um novo objeto do tipo Help Topic chamado Descricao
(figura 6.17) e seu contedo pode ser editado dando um clique sobre o mesmo e editando
o texto HTML/DTML do mesmo (figura 6.18).


Fundamentos do Zope 63
Figura 6.17 Objeto Descrio


Figura 6.18 Edio do objeto Descrio.

Para assinalar este tpico de ajuda a uma View basta ir guia Views da CdClass e
escolher qual ou quais Views usaro este tpico (figura 6.19).


Figura 6.19 Assinalando um tpico de ajuda a uma viso.

6.4 Trabalhando com a ZClass
Quando voc criou sua ZClass chamada CdClass o Zope criou 4 objetos dentro do
produto CdStore, os objetos CdClass_add e CdClass_addForm so DTML mtodos
Fundamentos do Zope 64
chamados mtodos construtores, pois so usados pelo Zope na construo de novas
instncias de CdClass.
O mtodo CdClass_add contm o cdigo para a adio de novas instncias e o
mtodo CdClass_addForm contm o formulrio para insero da informao necessria
para adio do novo objeto. Porm, ao serem construdos pelo Zope estes mtodos
contm um cdigo simplificado e no preparado para todas as propriedades de um novo
objeto do tipo CD. Assim, teremos que alterar ambos os mtodos para que os mesmos
sejam teis na criao da nova instncia.
O cdigo original do mtodo CdClass_addForm (listagem 6.1) deve ser alterado
para o cdigo personalizado (listagem 6.2) para que o formulrio apresentado para
insero das propriedades de um novo CD contenha todos os campos desejados.
<HTML>
<HEAD><TITLE>Add CD</TITLE></HEAD>
<BODY BGCOLOR="#FFFFFF" LINK="#000099" VLINK="#555555">
<H2>Add CD</H2>
<form action="CdClass_add"><table>
<tr><th>Id</th>
<td><input type=text name=id></td>
</tr>
<tr><td></td><td><input type=submit value=" Add "></td></tr>
</table></form>
</body></html>
Listagem 6.1 Mtodo CdClass_addForm original.
<HTML>
<HEAD><TITLE>Add CD</TITLE></HEAD>
<BODY BGCOLOR="#FFFFFF" LINK="#000099" VLINK="#555555">
<H2>Add CD</H2>
<form action="CdClass_add"><table>
<tr>
<th>Id</th>
<td><input type=text name=id size="60"></td>
</tr>
<tr>
<th>Ttulo</th>
<td><input type=text name=Ttulo size="60"></td>
</tr>
<tr>
<th>Cantor</th>
<td><input type=text name=Cantor size="60"></td>
Fundamentos do Zope 65
</tr>
<tr>
<th>Gravadora</th>
<td><input type=text name=Gravadora size="60"></td>
</tr>
<tr>
<th>Data de Lanamento</th>
<td><input type=text name=Data_de_Lanamento size="60"></td>
</tr>
<tr>
<th>Preo</th>
<td><input type=text name=Preo size="60"></td>
</tr>
<tr>
<th>Gnero</th>
<td><select name="Gnero">
<dtml-in name="Gneros">
<option value="<dtml-var sequence-item>"><dtml-var
sequence-item></option>
</dtml-in>
</select>
</td>
</tr>
<tr>
<td></td><td><input type=submit value=" Add "></td></tr>
</table></form>
</body></html>
Listagem 6.2 Mtodo CdClass_addForm modificado.

O mtodo CdClass_add original (listagem 6.3) tambm deve ser alterado (listagem
6.4) para processar as informaes enviadas pelo novo CdClass_addForm.
<HTML>
<HEAD><TITLE>Add CdClass</TITLE></HEAD>
<BODY BGCOLOR="#FFFFFF" LINK="#000099" VLINK="#555555">
<dtml-comment>We add the new object by calling the class in
a with tag. Not only does this get the thing
added, it adds the new thing's attributes to
the DTML name space, so we can call methods
Fundamentos do Zope 66
to initialize the object.
</dtml-comment>
<dtml-with "CdClass.createInObjectManager(REQUEST['id'],
REQUEST)">
<dtml-comment>
You can add code that modifies the new instance here.
For example, if you have a property sheet that you want to update
from form values, you can call it here:
<dtml-call "propertysheets.Basic.manage_editProperties(
REQUEST)">
</dtml-comment>
</dtml-with>
<dtml-comment>Now we need to return something. We do this via
a redirect so that the URL is correct.
Unfortunately, the way we do this depends on
whether we live in a product or in a class.
If we live in a product, we need to use DestinationURL
to decide where to go. If we live in a class,
DestinationURL won't be available, so we use URL2.
</dtml-comment>
<dtml-if DestinationURL>
<dtml-call "RESPONSE.redirect(
DestinationURL+'/manage_workspace')">
<dtml-else>
<dtml-call "RESPONSE.redirect(
URL2+'/manage_workspace')">
</dtml-if>
</body></html>
Listagem 6.3 Mtodo CdClass_add original.

<HTML>
<HEAD><TITLE>Add CdClass</TITLE></HEAD>
<BODY BGCOLOR="#FFFFFF" LINK="#000099" VLINK="#555555">

<dtml-with "CdClass.createInObjectManager(REQUEST['id'], REQUEST)">
<dtml-call "propertysheets.Propriedades_CD.manage_editProperties(REQUEST)">
<dtml-if NoRedir>
Fundamentos do Zope 67
<dtml-return name="this">
<dtml-else>
<dtml-if DestinationURL>
<dtml-call "RESPONSE.redirect(DestinationURL+'/manage_workspace')">
<dtml-else>
<dtml-call "RESPONSE.redirect(URL2+'/manage_workspace')">
</dtml-if>
</dtml-if>
</dtml-with>
</body></html>
Listagem 6.4 Mtodo CdClass_add modificado.
Assim, o novo formulrio CdClass_addForm ser apresentado (figura 6.x) com
entradas para todas as informaes necessrias para a criao de uma nova instncia de
CdClass.

Figura 6.20 Visualizao de CdClass_addForm.

6.5Criando um objeto CD
Iremos testar nossas mudanas nos mtodos construtores atravs da contruo de
um novo objeto CD. Para isso siga os passos:
1.V ao folder raiz e nele crie um folder chamado CDs.
2.Clique sobre este folder e dentro do mesmo selecione CD no menu Select type
to add....
3.Fornea as informaes para o novo objeto CD (figura 6.x).
4.Clique em Add.
Fundamentos do Zope 68
5.Verifique a criao de um novo objeto CD dentro do folder Cds.


Figura 6.21 Novo objeto CD.

6.7 Resumo
Neste captulo ns aprendemos com adicionar novos tipos de objetos ao Zope
atravs do uso de ZClasses. As ZClasses permitem a voc criar novas funcionalidades ao
Zope e s suas aplicaes sobre este ambiente.

Fundamentos do Zope 69
7
Zope e Banco de Dados
Neste captulo veremos como o Zope se relaciona com os sistemas de
gerenciamento de banco de dados para a construo de aplicaes. Em primeiro lugar
cabe ressaltar que o Zope utiliza um banco de dados prprio, chamado ZODB, para o
armazenamento de seus objetos internos. O ZODB um banco de dados orientado a
objeto e extremamente eficaz no armazenamento de objetos no Zope, pois ele
destinado ao armazenamento de objetos no formato ideal para ser utilizado pelo Zope.
7.1 ZODB
O ZODB um sistema de gerenciamento de banco de dados orientado a objetos que
pode ser usado com ou sem o Zope. Ele oferece um srie de funcionalidades:
Armazenamento mltiplo.
Transparncia em relao aos objetos.
Transacional.
Alta performance.
Cancelamento de aes.

7.2 RDBMS
Sistema de banco de dados relacionais o modo padro para o armazenamento e
recuperao de grandes quantidades de dados e informaes. Assim, deve-se discutir a
possibilidade de se utilizar bancos de dados relacionais para o armazenamento de dados
e informaes contidas em uma aplicao implementada e hospedada no Zope.
As vantagens de se utilizar um banco de dados relacional para o armazenamento de
dados incluem:
O modelo relacional permite a criao de relaes e regras complexas entre os
dados de forma fcil.
O armazenamento de grande quantidade de dados e sua rpida recuperao.
Possibilidade de uso da SQL para obteno de informao.
Outros softwares e aplicaes no hospedadas no Zope podem acessar a
informao armazenada.
Voc pode separar de forma mais concreta os dados e cdigo da aplicao.
O Zope permite a comunicao com diversos banco de dados comerciais e livres
Fundamentos do Zope 70
como Oracle, Sybase, PostgreSQL, Interbase, MySQL, Gadfly alm do uso de interface
ODBC. A comunicao entre o Zope e o Banco de Dados se d atravs de adaptadores
que devem ser instalados de acordo com o banco de dados a ser utilizado. O Gadfly o
nico banco de dados relacional que no necessita de adaptador, pois j acompanha a
instalao original do Zope.
Ns veremos um exemplo de conexo do Zope com o PostgreSQL, um banco de
dados objeto-relacional de cdigo aberto e livre, e com o Gadfly um banco de dados
relacional que acompanha a instalao original do Zope.
7.3 Zope e o Gadfly
Comearemos pela conexo com o Gadfly um banco de dados relacional que
acompanha o Zope e que no necessita de adaptador externo. Por exemplo, suponha que
voc queira armazenar as informaes a respeito dos CDs (captulo 6) em um banco de
dados relacional ao invs de deixar que o Zope as armazene no ZODB. Para fazer isso
voc deve criar um repositrio para os CDs indo ao diretrio /var/Gadfly e criando um
diretrio com o nome do repositrio que ser usado pelo Gadfly. A partir de ento voc
poder criar as tabelas e usar a o banco de dados para o armazenamento. Para
visualizarmos melhor vamos executar o seguintes passos:
Aps adicionar um diretrio BDCDs em var/Gadfly abaixo do diretrio de
instalao do Zope.
V at a raiz da interface de gerencimento do Zope e no menu Select type to
add... escolha Z Gadfly Database Connection.
Na interface apresentada preencha CdCon no campo Id e no campo Title
coloque Conexo ao BDCD e selecione BDCDs na lista Data Source (figura
7.1).
Selecione a nova conexo criada para visualizar suas guias(figura 7.2).
Selecione as guias para se familiarizar com as informaes contidas em cada
uma.

Figura 7.1 Propriedades da conexo CdCon.

Fundamentos do Zope 71

Figura 7.2 - Status da conexo criada.

Vamos testar a nossa conexo atravs da guia Test, para isso vamos realizar uma
instruo SQL para criar a tabela que ir armazenar as informaes para cada CD de
nossa aplicao.
V para a guia Test.
Escreva a instruo SQL (Listagem 7.1).
E depois da confirmao de execuo selecione a guia Browse para visualizar o
contedo do banco de dados (figura 7.3).

create table
CDS(
Titulo varchar,
Cantor varchar,
Gravadora varchar,
Data_de_Lancamento varchar,
Preco float,
Genero varchar
)
Listagem 7.1 Cdigo SQL para criao da Tabela CDS.

Figura 7.3 Visualizao do contedo do banco de dados.
Fundamentos do Zope 72

7.4Mtodos ZSQL
Mtodos ZSQL so mtodos que o Zope utiliza para realizar operaes sobre um
banco de dados atravs de uma conexo. Assim, um mtodo ZSQL est sempre
associado a uma conexo e pode realizar consultas, inseres, alteraes e qualquer
outra instruo SQL alm de poder conter mais de uma instruo SQL.
Vamos criar um mtodo ZSQL que permitir a insero de um CD na tabela CDS
no banco de dados BDCDs atravs da conexo CdCon. V para o folder CDs criado no
captulo 6 e no menu Select type to add... escolha Z SQL Method e clique em Add, ento
ser mostrado uma interface para a configurao do mtodo ZSQL (figura 7.x) e nela
coloque as informaes abaixo:
Id: InsereCd.
Title: SQL para insero de um CD no BD.
ConnectionId: CdCon.
Arguments: Titulo Cantor Gravadora Lancamento Preco Genero.
Query Template: Mtodo Z SQL para insero do CD (figura 7.4).


Figura 7.4 Interface para edio de um mtodo ZSQL.

7.4.1 Usando o mtodo ZQL.
Para se utilizar um mtodo ZSQL preciso ir guia Test do mesmo ou criar uma
interface personalizada que faa uso do ZSQL. Essa interface personalizada pode ser um
mtodo DTML que atravs de um formulrio invoca o mtodo ZSQL. Como exemplo voc
deve ir ao folder CDs e ento selecionar Z Search Interface no menu Select type to
Fundamentos do Zope 73
add... e prencher as informaes solicitadas na interface (figura 7.5).

Figura 7.5 Adicionando uma interface para a insero de um CD.
Aps clicar em Add dois mtodos DTML chamados Inserir e InserirForm.
InserirForm corresponde interface para adio de um novo CD j inserir um mtodo
que executar a insero do novo cd invocando o mtodo ZSQL InsereCd para que ele
efetue a insero no banco de dados.
Voc pode tambm fazer a invocao direta do mtodo ZSQL InsereCd atravs da
passagem de parmetros em formato de funo ou CGI.

7.5 Zope e o PostgreSQL
Veremos agora um exemplo usando o PostgresSQL como banco de dados alvo. O
PostgresSQL assim como o Gadfly e o MySQL um banco de dados gratuito e de cdigo
aberto. Porm, o PostgresSQL , dentre esses, o mais indicado para aplicaes
coorporativas, pois proporciona as mesmas caractersticas dos grandes bancos de dados
comerciais. O Gadfly, como visto anteriormente, um banco de dados integrado ao Zope
e de fcil uso, mas indicado apenas para pequenas aplicaes, pois sua performance
deixa a desejar em grandes aplicaes.
O MySql um banco de dados extremamente eficaz quanto performance e
apresenta grande facilidade de uso e flexibilidade, mas deixa a desejar quanto s
funcionalidades que ainda esto longe daquelas implementadas nos grande bancos de
dados atuais.
O PostgresSQL rene grandes funcionalidades com boa performance e cdigo
aberto.O PostgresSQL necessita da instalao de um adaptador para ser utilizado com o
Zope. Existem vrios adaptadores que podem ser obtidos em www.zope.org.
7.5.1 O PostgreSQL
Vamos iniciar com a criao do banco de dados no PostgreSQL. Abra uma sesso
shell no Linux e digite o comando:
Fundamentos do Zope 74
psql template1 postgres
para se logar ao banco de dados template1 com o usurio postgres atravs da
aplicao psql.
Aps a execuo deste comando voc ser levado ao "prompt" do PostgreSQL
indicando qual o banco de dados voc est conectado.
Para criar um banco de dados com o nome loja, digitaremos o comando:
CREATE DATABASE loja;
Agora nos conectaremos a esse banco atravs do comando:
\connect loja
e digitaremos
\d
para verificarmos que o banco de dados no possui nenhuma relao.

7.5.2 Criando uma conexo
Agora retorne interface de gerenciamento do Zope e na raiz do sistema crie uma
conexo para o PostgreSQL selecionando "Z Popy Database Connection" no menu
"Select type to add...".
Na interface apresentada (figura 7.6) preencha as informaes:
Id: dbLoja
Title: Conexo com o BD Loja
Database Connection String: user=postgres dbname=loja
e clique em Add


Fundamentos do Zope 75
Figura 7.6 - Adicionando uma conexo ao BD Loja.

Aps a adio da conexo voc ser levado raiz do Zope onde poder clicar sobre
a conexo para visualizar sua interface de administrao com sua guias (figura 7.7).
Explore as guias disponveis e verifique que a guia "Test" permite a execuo de
comandos e que a guia "Browse" permite a visualizao das relaes existentes.


Figura 7.7 - Interface para administrao da conexo.

Vamos criar uma tabela atravs da guia "Test". V para a guia "Test" e digite a
instruo SQL para a criao da tabela (listagem 7.2).
create table CDS(
Titulo varchar,
Cantor varchar,
Gravadora varchar,
Data_de_Lancamento varchar,
Preco float,
Genero varchar)
Listagem 7.2 - Instruo SQL para a criao da tabela CDS.
Clique em "Submit Query" para executar a instruo SQL.
Aps a execuo da instruo volte ao shell do linux e verique atravs do comando:
\d
que um nova tabela chamada cds mostrada.
Esta tabela foi criada atravs da conexo existente entre o Zope e o PostgreSQL.
Assim, pode-se realizar uma infinidade de operaes no banco de dados atravs da
interface entre o Zope e o PostgreSQL.

7.5.3 Avanando
Fundamentos do Zope 76
Vamos avanar utilizando o mtodo ZSQL criado anteriormente para a conexo com
o Gadfly. Mude o campo Connection Id para a conexo com o banco de dados Loja no
PostgreSQL(figura 7.8). Assim, a partir de agora, o mtodo InsereCd est trabalhando o
banco de dados PostgreSQL e no mais com a conexo CdCon.
Execute alguns testes com o mtodo ZSQL e verifique que as inseres so feitas no
banco de dados Loja dentro do PostgreSQL. Os mtodos DTML Inserir e InserirForm,
criados a partir Z Search Interface, trabalham, a partir de ento, com a base PostgreSQL.
Utilize o mtodo InserirForm para realizar algumas inseres na tabela cds e
verifique atravs de consultar a insero correta dos registros.

Figura 7.8 Mudana da conexo utilizada pelo ZSQL Method.
Resumo
Neste captulo voc se familiarizou com o uso do Zope se comunicando com um
banco de dados relacional e como um mtodo ZSQL independente de conexo.
Fundamentos do Zope 77
8
Zope e Python
Neste captulo estudaremos como o Zope se relaciona com a linguagem na qual foi
escrito, Python. O Python uma linguagem moderna, multiplataforma, orientada objetos
e com caractersticas que tem atrado um nmero cada vez maiores de desenvolvedores.
Python foi criada por Guido van Rossum e possui alm das caractersticas citadas acima
um acesso ao kit grfico Tk que permite o desenvolvimento de aplicaes GUI.
O Zope permite o uso de Python de trs diferentes maneira:
Python Scripts cdigos Python armazenados dentro do Zope que tem acesso
restrito aos mdulos Python, mas esto totalmente integrados ao Zope.
Mtodos Externos cdigos Python que residem no sistema de arquivo e que
tem acesso completo a todos os mdulos Python.
Produtos cdigos Python com acesso completo a todos os mdulos Python,
mas que descrevem alguma funcionalidade ou caracterstica que ser agregada
ao Zope.
8.1 Introduo ao Python
Como descrito anteriormente o Python um linguagem moderna e por isso agrega
caractersticas tpicas de linguagens atuais como: orientao objetos e multiplataforma.
Alem destas, o Python, ao contrrio de J ava, pode ser usada como uma linguagem
procedural, pois o uso da orientao objetos no obrigatrio. Como J ava, Python
semi-interpretada ou semi-compilada, pois o cdigo original compilado para um cdigo
de bytes (byte-code) e ento interpretado pelo compilador Python o que aumenta
performance em relao linguagens interpretadas comuns e adiciona flexibilidade em
relao s linguagens compiladas. Python possui tipagem dinmica onde o tipo de uma
vriavel e objeto determinado dinamicamente pelo seu valor insto implementa grande
flexibilidade em relao outras linguagens fortemente tipadas e indica que Python uma
boa escolha para o uso em scripts e manipulao de strings e dados.
8.2 Tipos de Dados
O Python possui trs grandes grupos de tipos de dados:
Numricos
Sequencias
Nulos (None)
8.2.1 Nmericos
Fundamentos do Zope 78
Os tipos nmericos se dividem em inteiros, inteiros longos, pontos flutuantes, octais,
hexadecimais e complexos.
Os inteiros variam de -2147483647 a +2147483647.
O inteiros longos tem tamanho ilimitado e devem ser construdos com a letra l ou L no
seu final, assim x =10L um interior longo.
Nmeros de ponto flutuante devem possuir . ou a notao e/E. Assim, x =12.3 e y
=5e3 so nmeros de ponto flutuante.
Nmeros octais devem ser precedidos por 0 e hexadecimais por 0x ou 0X, ento
x=013 e y=0x2 so nmeros octais e hexadecimais, respectivamente.
Nmeros complexos so nmero que possuem a componente j ou J . Assim, x =2 +3j
um nmero complexo.
8.2.2Tipos Sequenciais
O Python suporta quatro tipos sequenciais: strings, listas, tuplas e dicionrios, onde
tipos sequenciais so tipos de dados que podem ser acessveis atravs de ndices e que
seu valor considerado um conjunto ou coleo de elementos ou objetos.
Python indexa os tipos sequenciais a partir de zero. Assim, o primeiro elemento de
uma sequencia possui o ndice zero.
As strings so sequencias usadas para o armazenameto de caracteres na forma de
encadeada criadas atravs de aspas simples ou duplas. Por exemplo, s='wilton' uma
string, bem como, s=wilton tambm . Python suporta string com mltiplas linhas
bastanto que voc triplica as aspas simples ou duplas.
Exemplo:
s =''' Esta uma
string
multilinha'''
As listas em Python so como vetores em outras linguagens, com exceo de que os
objetos contidos na lista no necessitam ser de mesmo tipo, com ocorre em vetores. Para
se criar uma lista basta colocar os objetos ou elementos dentro de colchetes e separados
por vrgula.
Exemplo:
L =[ 'wilton', 4, 34L, 21+2j]
No exemplo anterior, L uma lista que contm 4 objetos e possui um srie de
mtodos que podem ser utilizados sobre ela.
Outro tipo sequencial existente em Python o tipo tupla. Este tipo muito semelhante
ao tipo lista, mas com valores que no podem ser modificados. Uma tupla contruda
atravs de parnteses com objetos separados por vrgula.
Exemplos:
t1 =( ) - tupla vazia.
t2 =('wilton', 'oi', 16) tupla com 3 elementos.
t3 =(12,) - tupla unitria.
O ltimo tipo de dado sequencial o dicionrio; um dicionrio um tipo constitudo a
Fundamentos do Zope 79
partir de pares chave:valor onde o dicionrio indexado pelo valor das chaves e a ela
associado um valor. Um dicionrio criado atravs de chaves, onde a virgula separa os
elementos do dicionrio e o dois pontos separam o par chave:valor.
Exemplo
dic ={'apple':'maa','orange':laranja}
8.2.3 Tipo nulo
O Python possui um tipo de valor nulo chamado None. O valor None representa um
objeto vazio.
8.3 Operadores
Python possui uma enorme quantidade de operadores.
8.4Endentao
Python, ao contrrio da maioria das linguagens, no possui um delimitador de blocos
como begin-end ou {- }, Python usa a endentao como delimitador de bloco. Portanto,
para codificar em Python voc deve obrigatoriamente endentar o seu cdigo para
executar blocos de comandos dentro de if-else, while e for. Isso alm de propiciar maior
legibilidade do cdigo simplifica a codificao, uma vez que voc no necessitar
escrever cdigo para delimitar blocos.
Exemplo:
Em Python os cdigos abaixo (listagem 8.x e 8.x) tem comportamento diferentes:
def lista(N):
for i in range(N):
j =i
print j
return j
Listagem 8.x
def lista(N)
for i in range(N):
j =i
print j
return j
Listagem 8.x
Enquanto a primeiro cdigo (listagem 8.x) imprime o valor de j a cada iterao do lao
for o segundo (listagem 8.x) imprime o valor de j somente ao final do lao.
8.5Orientao a Objetos em Python
Python uma linguagem orientada a objetos atravs da construo de classes que
encapsularo mtodos e atributos. Em Python tudo um objeto, at os tipos primitivos
como inteiros, listas e funes so exemplos de objetos. Vejamos um cdigo de
exemplo(listagem 8.x) e faamos alguns comentrios.
class Evento:
Fundamentos do Zope 80
n_eventos=0
def __init__(self):
self.__cod_evento =Evento.n_eventos +1
self.__des_evento =''
Evento.n_eventos=Evento.n_eventos+1
def getcod_evento(self):
return self.__cod_evento
def getdes_evento(self):
return self.__des_evento
def setdes_evento(self,str):
self.__des_evento=str
def getn_eventos(self):
return Evento.n_eventos
O cdigo acima (listagem 8.x) define uma classe chamada Evento que possui um
mtodo construtor __init__ que cria os atributos de instncia cod_evento e des_evento,
a classe possui um atributo de classe chamado n_eventos que denota o nmero de
evento criados. Alm do construtor a classe evento possui um mtodos como
getcod_evento, getdes_evento, setdes_evento e getn_eventos.
Os mtodos de uma classe so definidos atravs da construo:
def nome_do_mtodo (self [,outros parmetros]):
cdigo
Assim, nos mtodos o parmetro self obrigatrio.
Os atributos de instncias so contrudos no mtodo construtor __init__, que deve
informar quais atributos esto disponveis e qual o valor inicial. Atributos ou mtodos
iniciados por dois underscore ('__') so privados e s esto acessveis ao elementos
dentro da classe.
O atributo n_eventos um atributo de classe, pois est definido fora do mtodo
__init__ e portanto pertence classe Evento.
O uso de classes interessante para o desenvolvimento de produtos para o Zope, de
componentes reutilizveis, e de aplicaes complexas e expansveis. Por ser um tpico
avanado para este momento, aconselhamos queles que desejam maiores detalhes a
procurar um livro da linguagem Python para se aprofundar respeito do assunto (ver
referncias bibliogrficas).
8.6Funes
Apesar de Python suportar a orientao a objetos voc pode us-lo como uma
linguagem procedimental tal como C e Pascal ou mesmo de script como Perl e VBScript,
pois ele permite a criao de funes e blocos de cdigo que sero executados quando
invocados.
Para definir uma funo em Python use o modelo:
def nome_da_funo(argumentos):
cdigo
Fundamentos do Zope 81
Exemplo:
def potencia(x,y=0):
r =1
while y>0:
r =r*x
y=y-1
return r
No cdigo acima definimos uma funo que calcula a potncia de um nmero x
elevado a um nmero y, onde o valor padro de y 0, e retorna o resultado r. Python
permite a passagem de valores padro para os argumentos, sendo que um argumento
com valor padro s pode ser sucedido por argumentos com valores padro. princpio
todas as variveis ou objetos so locais e tem sua vida limitada vida da funo, assim
se voc desejar que uma varivel seja global deve preced-la com a palavra global para
que sua existncia continue aps a existncia da funo e que outras funes possam
acessar seu valor.
8.7Scripts Python dentro do Zope
No Zope um dos principais uso da linguagem Python atravs de scripts, dentro do
Zope voc pode adicionar objetos do tipo Scripts Python para utilizar a funcionalidade
desta linguagem no tratamento de objetos dentro do Zope. Existe, por segurana, uma
restrio s permisses que um Script Python possui dentro do Zope, essa restrio se
resume impossibilidade de se importar alguns mdulos do Python.
Apesar das restries os Scripts Python so extremamente teis e poderosos e
podem ser usados para realizar uma infinidade de tarefas dentro do Zope.
8.7.1Criando Scripts Python no Zope
Criar um Script Python no Zope como criar qualquer outro objeto no Zope, no menu
Select type to add... escolha Script Python e preencha o formulrio com as informaes
de Id e clique em Add and Edit (figura 8.x).
Aps a adio do novo script voc poder edit-lo e escrever o cdigo que adiciona
funcionalidade ao script.
Por exemplo, vamos escrever um cdigo que traduz uma palavra do ingls para o
portugus atravs do teste de valores conhecidos (listagem 8.x).
palavras ={'apple':'ma','orange':'laranja', 'lemon':'limo'}
palavra =palavras.get(word,word)
return palavra
Listagem 8.x
O cdigo acima (listagem 8.x) declara um dicionrio chamado palavras que contem
alguns pares de palavras em ingls com o seu respectivo sentido em portugus, ento a
string palavra recebe o valor da chave word passada como parmetro caso ela exista ou
mantem o valor caso contrrio, logo em seguida o script retorna palavra.
Este script apenas um exemplo da funcionalidade de scripts Python dentro do Zope,
a funo acima poderia ser usada em um ambiente para traduo on-line ou mesmo em
um site educacional de ensino da lngua inglesa.
Fundamentos do Zope 82
Voc deve ter observado que um objeto Script Python possui, como a maioria dos
objetos Zope, uma srie de guias; algumas dela j conhecidas, mas outras duas merecem
destaque.
A guia Bindings relaciona os nomes de variveis de ambiente que esto acessveis
ao seu script.
A guia Test permite testar o comportamento do script atravs de uma interface que
permite a passagem direta dos argumentos e visualizar o retorno do script.
8.7.2Usando Scripts Python
Para usar uma script Python dentro de uma aplicao Zope voc deve invoc-lo
atravs de um DTML Method ou DTML Document em uma tag DTML que aceite atributos
name ou expr. Em geral, voc invocar um script Python em tags dtml-var ou dtml-call.
Voc usar a tag dtml-var quando quiser que o resultado do script seja inserido no
documento chamador e usar dtml-call quando no desejar inserir o retorno do script ou
se o script no retorna valor.
8.8Mtodos Externos
A segunda maneira de se utilizar Python em Zope atravs de mtodos externos,
mtodos externos so funes Python que residem no sistema de arquivos e esto so
acessveis ao Zope atravs de um objeto chamado External Method, este objeto identifica
qual o mdulo e o nome da funo ou mtodo que deve ser executado quando o
mesmo for invocado a partir do Zope (figura 8.x).
Os mtodos externos so potencialmente mais poderosos que os scripts Python
internos, pois eles possuem acesso completo ao demais mdulos do Python e ainda
acesso aos mtodos iniciados por um underscore simples (_) que so considerados pelo
Zope com mtodos privados, mas no so considerados mdotos privados o Python, pois
em Python um mtodo ou atributo privado quando o mesmo inicia com undercore duplo
(__).
Os mtodos externos devem estar, obrigatoriamente, no diretrio extensions abaixo
do diretrio de instalao do Zope.
8.9Uso de Python em Produtos
A terceira maneira de se utilizar o Python em Zope atravs da criao de Produtos.
Voc pode extender as funcionalidades do Zope atravs de Produtos, que so mdulos
Python que definem objetos que adicionaro funcionalidades ao Zope atravs de novos
objetos disponveis na interface de gerenciamento do Zope.
Vimos no captulo 6 a criao de novos produtos no Zope para a insero de
ZClasses. Com o uso de Python todo o processo de criao de novos produtos feito em
arquivos Python o que agrega maior acesso a recursos e flexibilidade ao produto. Por ser
um tpico avanado a criao de produtos ser coberta em um material futuro.
Resumo

Fundamentos do Zope 83
9
Uma pequena aplicao em Zope II
Neste captulo criaremos uma pequena aplicao em Zope, semelhante criada no
captulo 5, para o controlar o trmite de documentos recebidos por uma casa legislativa.
A diferena entre esta e aquela que nesta utilizaremos um banco de dados relacional
para o armazenamento das informaes do protocolo e trmite de documentos.
A aplicao se utilizar dos conceitos vistos at o momento neste material. Assim, o
escopo e a funcionalidade desta aplicao sero mais abrangentes que a aplicao vista
no captulo 5.
9.1 A conexo com o Banco de Dados
J que neste captulo utilizaremos um banco de dados relacional necessitaremos de
uma conexo com o mesmo. Como visto anteriormente, o Zope possibilita a conexo com
banco de dados externos atravs de adaptadores que so, de forma simplicada,
conectores utilizados pelo o Zope para se comunicar com um determinado servidor de
banco de dados.
Utilizaremos um adaptador para o PostgreSQL chamado ZPoPy, mas outros podem
ser utilizados.
9.2 O banco de dados
Para iniciarmos o uso do PostgreSQL pelo Zope necessrio que criemos um banco
de dados no servidor PostgreSQL. Para isto siga os passos:
1.Abra um terminal no Linux e digite:
psql template1 postgres
Para ser conectar ao servidor PostgreSQL no banco de dados template1 e
usurio postgres.
2.Na interface psql, digite:
CREATE DATABASE protocolo ;
Este comando criar o banco de dados protocolo no servidor PostgreSQL.
Volte para o Zope e no folder raiz escolha "Z PoPy Database Connection" no menu
"Select type to add..." e preencha as informaes conforme os dados:
Id: ProtCon;
Title: Conexo com o BD Protocolos;
Database Connection String: user=postgres dbname=protocolo;
Fundamentos do Zope 84
Clique em "Add".
Aps a adio da conexo ela estar disponvel para ser usada nos mtodos ZSQL.
9.3 As tabelas do banco de dados
Para testar a conexo criada, iremos criar as tabelas "documento_recebido" e
"tramite" atravs do Zope.
Clique sobre a conexo criada anteriormente e v para a guia Test.
Nela digite as instrues SQL para a criao das tabelas necessrias (listagem 9.1 e
9.2)
Create Table documento_recebido(
NumPro varchar, DatHor varchar , NumDoc varchar,
DatEmi varchar ,Refere varchar, Origem varchar,
TipDoc varchar , Assunt varchar , QuaAne varchar);
Listagem 9.1
Create Table tramite(
NumPro varchar, Recepc varchar , Destin varchar,
Recebi varchar , Situac varchar);
Listagem 9.2
Submeta as instrues e se tudo ocorrer corretamente voc poder verificar a criao
das tabelas no servidor PostgreSQL.
9.4 A aplicao
No folder raiz do Zope, crie um folder chamado ProtocolosBD e copie todos os
mtodos existentes no folder Protocolos (criado no captulo 5) para este folder, pois
iremos adaptar esses mtodos DTML para que eles trabalhem com o banco de dados.
Neste folder tambm ser criado os mtodos ZSQL para a realizao de inseres,
alteraes e consultas no banco de dados.
9.5 O mtodos ZSQL
9.5.1 Mtodo ZSQL para Insero de Documento Recebido (InsDocRecSql)
Crie um mtodo ZSQL, escolhendo "Z SQL Method" no menu "Select type to add...",
com Id "InsDocRecSql" contendo o cdigo (figura 9.1) necessrio para a insero das
informaes de um documento recebido no banco de dados.


Fundamentos do Zope 85

Figura 9.1 - Mtodo ZSQL para a insero de um registro.

9.5.2 Mtodo ZSQL para Insero de Trmite (InsTramDocRecSql)
Crie outro mtodo ZSQL, com Id "InsTramDocRecSql" contendo o cdigo (figura 9.2)
necessrio para a insero de um trmite ao documento recebido no banco de dados.


Figura 9.2 - Mtodo ZSQL para a insero de um tramite ao documento.

9.5.3 Mtodo ZSQL para a consulta dos Documentos Recebidos (SelDocRecSql)
Fundamentos do Zope 86
Mtodo ZSQL com Id "SelDocRecSql" contendo o cdigo (figura 9.3) necessrio para
a consulta dos documentos recebidos armazenados no banco de dados.


Figura 9.3 - Mtodo ZSQL para a obteno dos protocolos.

9.5.4 Mtodo ZSQL para a consulta das informaes de um Documento Recebido
(SelInfNumProSql)
Mtodo ZSQL com Id "SelInfNumProSql" contendo o cdigo (figura 9.4) necessrio
para a consulta das informaes de um documento recebido.

Figura 9.4 - Mtodo ZSQL para a obteno das informaes de um protocolo.


Fundamentos do Zope 87
9.5.5 Mtodo ZSQL para a consulta do trmite de um Documento Recebido
(SelTramNumProSql)
Mtodo ZSQL com Id "SelTramNumProSql" contendo o cdigo (figura 9.5) necessrio
para a consulta do tramite de um documento recebido.


Figura 9.5 - Mtodo ZSQL para a obteno dos trmites de um protocolo.

9.6 Adaptao dos mtodos DTML para o uso do BD
Os mtodos DTML criados do captulo 5 devero ser adaptados para o uso do BD.
9.6.1 A pgina inicial (index_html)
A pgina inicial chamada index_html deve ter os links atualizados para que se utilize
dos formulrios contidos no folder ProtocolosBD como o cdigo abaixo (listagem 9.3).

<html>
<body bgcolor="#ffffff" text="#000000" link="#0000ee" alink="#0000ee" vlink="#551a8b">
<div align="center">
<h1><font color="#000000">Sistema de Protocolo e </font></h1>
<h1><font color="#000000">Tramita&ccedil;&atilde;o de Documentos</font></h1>
<table cellpadding="2" cellspacing="2" border="1" width="100%">
<tbody>
<tr>
<td valign="top" align="center" bgcolor="#ffffff"><font color="#000000">
Protocolar<br>
</font></td>
Fundamentos do Zope 88
<td valign="top" align="center"><font color="#000000">Tramitar<br>
</font></td>
</tr>
<tr>
<td valign="top"><font color="#000000"><a href="/ProtocolosBD/AddDocRecebidoForm">Documentos
Recebidos</a><br>
</font></td>
<td valign="top"><font color="#000000"> <a href="/ProtocolosBD/DocRecebidos"> Documentos
Recebidos<br>
</font></td>
</tr>
<tr>
<td valign="top"><font color="#000000">Documentos Expedidos<br>
</font></td>
<td valign="top"><font color="#000000">Documentos Expedidos<br>
</font></td>
</tr>
<tr>
<td valign="top"><font color="#000000">Documentos Internos<br>
</font></td>
<td valign="top"><font color="#000000">Documentos Internos<br>
</font></td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
Listagem 9.3 - cdigo da pgina inicial.
9.6.2 Mtodo de adio (AddDocRecebido)
O mtodo DTML responsvel por receber os dados provindos do formulrio de adio
e realizar a adio do protocolo de documento recebido deve ser alterado para que se
utilize do mtodo ZSQL para insero de um Documento Recebido no Bando de Dados
(listagem 9.4).

<dtml-var standard_html_header>
<dtml-try>
<dtml-call "InsDocRecSql(NumPro=NumPro ,DatHor=DatHor, NumDoc=NumDoc,
Fundamentos do Zope 89
DatEmi=DatEmi, Refere=Refere, Origem=Origem, TipDoc=TipDoc,
Assunt=Assunt, QuaAne=QuaAne, Destin=Destin, Recebi=Recebi, Situac=Situac )">
<dtml-except>
<P>Problemas com a execuo! <br>Tente Novamente!</p>
<a href="index_html">Voltar </a>
<dtml-else>
<p>Insero realizada com sucesso!!</p>
<a href="index_html">Voltar </a>
</dtml-try>
<dtml-var standard_html_footer>
Listagem 9.4 - cdigo para adio de um documento.

9.6.3 Lista dos documentos recebidos (DocRecebidos)
O mtodo DTML (listagem 9.5) que listar os documentos recebidos existentes
dever obter a lista de documento do banco de dados e possibilitar a seleo de um dos
documentos para a tramitao.

<dtml-var standard_html_header>
<dtml-let x="SelDocRecSql()">
<dtml-in x>
<a href="TramDocRecebido?obj=<dtml-var numpro>"><dtml-var numpro></a> <br>
</dtml-in>
</dtml-let>
<dtml-var standard_html_footer>
Listagem 9.5 - cdigo para listagem dos documentos recebidos.

9.6.5 Formulrio de tramitao(TramDocRecebido)
Aps a seleo de um documento na lista de documentos ser mostrado um
formulrio para a adio do trmite do documento). Este formulrio dever apresentar as
informaes do documento selecionado, obtidas no Banco de Dados e possibilitar a
adio de um trmite ao documento na tabela "tramite"(listagem 9.6).

<dtml-var standard_html_header>
<dtml-in "SelInfNumProSql(NumPro=obj)">
<p>Protocolo:<dtml-var numpro></p>
<p>Data e Hora:<dtml-var dathor></p>
<p>Nmero do Documento:<dtml-var numdoc></p>
<p>Data Emisso:<dtml-var datemi></p>
Fundamentos do Zope 90
<p>Referncia:<dtml-var refere></p>
<p>Origem:<dtml-var origem></p>
<p>Assunto:<dtml-var assunt></p>
<p>Quantidade de anexos:<dtml-var quaane></p>
<p >TRAMITAO </p>
</dtml-in>
<table >
<th align="center">Data de Recebimento</th>
<th align="center">Destinatrio</th>
<th align="center">Recebido/Encaminhado</th>
<th align="center">Situacao</th>
<dtml-in "SelTramNumProSql(NumPro=obj)">
<tr>
<td align="center"><dtml-var recepc></td>
<td align="center"><dtml-var destin></td>
<td align="center"><dtml-var recebi></td>
<td align="center"><dtml-var situac></td>
</tr>
</dtml-in>
</table>
<p>Encaminhamento</p>
<form action=AddTramite>
<table>
<input type="hidden" name="NumPro" value=<dtml-var obj>>
<tr><td>Destinatrio:</td><td><input type="text" name="Destin"></td>
<tr><td>Envio:</td><td><input type="text" name="Recebi"></td>
<tr><td>Situao:</td>
<td>
<select name="Situac">
<dtml-in Situacao>
<option value="<dtml-var sequence-item>"><dtml-var sequence-item>
</dtml-in>
</select></td>
<tr><td><input type=reset value=limpar></td><td><input type=submit value=adicionar></td></tr>
</table>
</form>
<dtml-var standard_html_footer>
Fundamentos do Zope 91
Listagem 9.6 - cdigo para o formulrio de trmite de documento recebido.

9.6.6 Mtodo de tramitao(AddTramite)
O mtodo DTML (listagem 9.7) receber as informaes do formulrio de tramitao
e efetuar a atualizao das informaes do documento protocolado no banco de dados
atravs do mtodos ZSQL.

<dtml-var standard_html_header>
<dtml-let dat="ZopeTime().strftime('%d/%m/%Y-%H:%M')">
<dtml-try>
<dtml-call "InsTramDocRecSql(NumPro=NumPro ,Recepc=dat, Destin=Destin, Recebi=Recebi,
Situac=Situac )">
<dtml-except>
<P>Problemas com a execuo! <br>Tente Novamente!</p>
<a href="index_html">Voltar </a>
<dtml-else>
<p>Insero realizada com sucesso!!</p>
<a href="index_html">Voltar </a>
</dtml-try>
</dtml-let>
<dtml-var standard_html_footer>
Listagem 9.7 - cdigo para a adio de um trmite ao documento recebido.

Resumo
Este captulo serviu para o desenvolvimento de um pequena aplicao em Zope
utilizando Banco de Dados. Atravs dele vimos que o uso de banco de dados atravs do
Zope se d de maneira transparente e funcional o que possibilita a criao de aplicaes
complexas e flexveis com o uso desta ferramenta.



Fundamentos do Zope 92
Apndice A: DTML Reference
call: Chamada de um mtodo
A tag call permite que voc chame um mtodo sem que ele retorne os resultados no
documento gerado pelo DTML.

Sintaxe:
<dtml-call Variavel | expr=Expresso>

Se a tag call usa uma varivel, os argumentos do mtodo so passados
automaticamente pelo DTML semelhante ao uso da tag var. Se especificado um mtodo
na expresso, ento voc deve passar os argumentos.

Exemplos:

Usando a tag call com uma varivel
<dtml-call UpdateInfo>
Chama o objeto UpdateInfo e passa os argumentos automaticamente.
Usando a tag call com uma expresso
<dtml-call expr=RESPONSE.setHeader('content-type','text/plain')>

comment: Comentando um DTML

A tag comment permite a documentao do DTML adicinando comentrios. Pode-se
usar essa tag para desabilitar partes do cdigo escrito, bastando por essas partes como
comentrio

Sintaxe:
<dtml-comment>
bloco
</dtml-comment>
A tag comment e uma tag de bloco. O contedo do bloco, seja comentrio ou parte do
cdigo no executado, nem inserido no documento gerado pelo DTML
Exemplos:
<dtml-comment>
O contedo desse bloco na executado nem aparece na sada
</dtml-comment>
Fundamentos do Zope 93

Comentando parte do cdigo
<dtml-comment>
Essa parte do cdigo DTML estar desabilitada e no ser executada
<dtml-call someMethod>
</dtml-comment>

Funes DTML
Pode-se utilizar algumas funes do Python e algumas especficas da linguagem
DTML.
Funes:
abs(nmero)
retorna o valor absoluto de um nmero. O argumento nmero pode ser um inteiro
simples ou longo ou um nmero de ponto flutuante. Se o argumento um nmero
complexo, sua magnitude devolvida.
chr(nmero)
retorna uma string de um caracter cujo argumento corresponde ao nmero do
caracter na tabela ASCII. ex.: chr(97) devolve a string a. o inverso da funo ord(), por
ex.: ord(a) retorna o valor inteiro 97. O argumento da funo chr deve estar entre 0 e 255
inclusive. Ser gerado um ValueError se o argumento passado ultrapassar o intervalo.
DateTime()
retorna um objeto Zope DateTime dando argumentos de classes construtoras. Veja
na API (Apndice B) a referncia DateTime os argumentos da classe contrutora.
Divmod(nmero,nmero)
Dado os 2 nmeros como argumento, a funo retorna 2 nmeros, o quociente e o
resto. Se utilizar operanos de tipos diferentes, ser aplicada as regras para operadores
binrios. Para inteiro e inteiro longo, o resultado ser (a / b, a % b). onde a % b o resto
da diviso de a por b. Para 2 numeros do tipo ponto flutuante o resultado ser (q, a % b),
onde q o resultado de math.floor (a/b). Temos que 'q * b +a % b' aproximadamente a,
se a % b diferente de zro tem o mesmo sinal de b, e 0 <=abs(a%b) <abs(b).
float(number)
Converte uma string ou um nmero em ponto flutuante. Se o argumento passado
for uma string, essa string pode conter um decimal com sinal ou um numero em ponto
flutuante, identico a funcao string.atof(number). Ou ento o argumento passado pode ser
um inteiro ou inteiro longo ou ponto flutuante, a funo retornar um ponto flutuante
(dentro da preciso do ponto flutuante na linguagem python).
getattr(objeto,string)
retorna o valor de um atributo do objeto passado como parametro. O nome do
atributo deve ser uma string. Se a string passada como parametro for o nome de um
atributo do objeto, o retorno da funo ser o valor do atributo. Por exemplo, getattr(x,
foobar) equivalente a x.foobar. Se no existir nenhum nome de atributo igual ao
parametro passado, retornado um valor default se especificado, seno gerado um erro
Fundamentos do Zope 94
do tipo AttributeErro.
getitem(varivel, render=0)
retorna o valor da varivel DTML. Se render verdadeiro, a varivel e renderizada.
Veja a funo render.

hasattr(objeto,string)
retorna 1 se a string passada como parmetro tem o mesmo nome de um dos
atributos do objeto, 0 caso contrrio.(funo implementada chamando a funo
getattr(objeto, nome) e analisando se gerado uma exceo ou no.
hash(objeto)
retorna o valor hash do objeto (se ele possuir um). Valores hash sao inteiros. So
utilizados para comparar rapidamente palavras-chaves de um dicionrio durante uma
busca. Valores numricos considerado iguais, tem o mesmo valor de hash (mesmo se
eles possuirem tipos diferentes, ex.: 1 e 1.0).
has_key(varivel)
retorna verdadeiro se namespace DTML contm a varivel passada como
parmetro.
hex(inteiro)
Converte um nmero inteiro (de qualquer tamanho) em uma string hexadecimal. O
resultado uam expresso python vlida. Nota: Sempre retorna um literal sem sinal. ex.:
em uma mquina de 32-bits, hex(-1) mostra 0xffffffff. Quando utilizamos este literal em
mquinas de mesmo tamanho de word (32-bits), esse literal (0xffffffff) convertido em -1;
em mquinas com diferentes tamanhos de palavras, a funo tenta converter em um valor
positivo o maior possvel, ou ento gera uma excesso do tipo OverflowError.
int(nmero)
Converte uma string ou um nmero em um inteiro simples. Se o argumento
passado for uma string, essa string pode conter um nmero decimal com sinal
representado como um inteiro na linguagem Python, podendo estar entre espaos em
branco; uso identico a 'string.atoi(number[,radix]'). O parametro radix fornece a base para
a converso, deve ser um valor inteiro entre 2 e 36. Se o parametro radix especificado e
o nmero no uma string, gerado um erro do tipo TypeError. No outro caso o
argumento deve ser um inteiro simples ou longo ou um nmero ponto flutuante.
len(seqncia)
retorna o tamanho de um objeto (o nmero de tens). O argumento pode ser uma
segncia (string, t-uplas ou lista) ou mapeamento (dicionrio)
max(s)
quando utilizada com um argumento simples (s), a funo retorna o maior item de
uma sequencia no vazia (ex.: uma string, t-upla ou lista). Quando utilizada com mais de
um argumento, a funo retorna o maior dos argumentos.
min(s)
quando utilizada com um argumento simples (s), a funo retorna o menor item de
uma sequencia no vazia (ex.: uma string, t-upla ou lista). Quando utilizada com mais de
Fundamentos do Zope 95
um argumento, a funo retorna o menor dos argumentos.
namespace([name=value]...)
retorna um novo objeto DTML namespace. A palavra chave do argumento
name=value so colocadas no novo namespace
oct(inteiro)
converte um nmero inteiro (de qualquer tamanho) em uma string composta pelo
seu correspondente em octal. O resultado uma expresso vlida em Python. Nota:
Sempre retorna um literal sem sinal. ex.: em uma mquina de 32-bits, oct(-1) mostra
037777777777. Quando utilizamos este literal em mquinas de mesmo tamanho de word
(32-bits), esse literal (037777777777) convertido em -1; em mquinas com diferentes
tamanhos de palavras, a funo tenta converter em um valor positivo o maior possvel, ou
ento gera uma excesso do tipo OverflowError.
ord(caracter)
retorna o valor ASCII de uma string com tamanho de um caracter. ex.: ord(a)
retorna o inteiro 97. Funo inversa da funo chr().
pow(x,y, opcional ,z)
retorna x elevado a y, se passar o parametro opcional z, a funo retorna x elevado
a y modulo z (ou seja, o resto da diviso de x elevado a y por z), esta funo processa
mais eficientemente do que se estivessemos utilizando 'pow(x,y)%z'. Os argumentos
devem ser de tipos numricos. Com operandos de tipos diferentes, aplicado a regras da
aritimtica binria. O tipo do operando ser o mesmo do resultado, se o resultado no
puder ser expressado no tipo dos operandos a funo gera uma exceo. ex./; pow(2,-1)
ou pow(2, 35000) no permitido.
range(opcinal start, stop opcional ,step)
( uma funo verstil para se criar listas contendo progresses artimticas. Os
argumentos devem ser inteiros simples. Se o argumento step omitido, a funo assume
que o valor de step 1. Se o argumento start omitido, assume-se que seu valor 0. A
funo retornar uma lista de inteiros simples '[start, start+step, start+2*step,...]'. Se step
positivo, o ltimo elemento ser o maior dos 'start+i*step' que menor que o argumento
stop; se step negativo, o ltimo elemento ser o maior dos 'start+i*step' que maior
que o stop. Step no pode ser igual a zero) (caso contrrio gerada uma exceo do tipo
ValueError)
round (x opcional ,n)
retorna o valor arredondado por n digitos depois da virgula, do ponto flutuante x .
Se o argumento n omitido, assume como valor de n igual a zero. O resultado um
ponto flutuante. Os valores so arredondados para o mltiplo mais prximo de 10 elevado
a -n; no caso em que temos dois mltiplos praticamente iguais, assume-se o multiplo mais
longe do zero. (ex.: round(0.5) =1.0 e no 0.0; round(-0.5) =-1.0 e no 0.0)
render(objeto)
Processa objetos. Para objetos DTML (tipo DTML document, method) a funo
avalia o contedo (executa as tags DTML contidas no objeto) do objeto, seguindo o
namespace corrente. Para outros tipos de objetos 'e equivalente a str(objeto).
reorder(s opcional ,with opcionl ,without)
Fundamentos do Zope 96
Reordena os itens de s de acordo com a ordem dada no argumento with e sem os
itens mencionados no argumento without. Os itens presentes em s que no foram
mencionados no argumento with sero removidos. s, with e without so sequencias de
strings ou sequencias de valores chaves de uma t-uplas, com ordenao por esses
valores. Funo til para construo de listas de seleo ordenadas.
SecurityCalledByExecutable()
retorna verdadeiro se o objeto corrente (ex.: DTML document ou method) est
sendo chamado por um executvel (ex.: outro DTML document ou mtodo, um script ou
SQL method).
SecurityCheckPermission(permission, objeto)
Checa as permisses para a manipulao de objetos. Exemplo:
'SecurityCheckPermission(Add Documents, Images, e Files, this())' Retorna verdadeiro
se o usurio corrente est autorizado a criar documentos, imagens, e arquivos no local
corrente.
SecurityGetUser()
Retorna o objeto corrente do usurio. Geralmente o mesmo que o comando
REQUEST.AUTHENTICATED_USER object. No entanto, o comando
AUTHENTICATED_USER object inseguro, pois pode ser substitudo.
SecurityValidadeValue(objeto)
retorna verdadeiro se o objeto pode ser acessado pelo usurio corrente. Esta
funo equivalente a chamar SecurityValidade(None, None, None, objeto).
str(objeto)
retorna uma string contendo uma representao do objeto melhor modificada para
impresso (visualizao).
test(condio, resultado[,condio, resultado]...opcional ,default)
Testa uma ou mais condies, retorna o resultado da primeira condio verdadeira.
Somente um resultado retornado, mesmo que haja mais de uma condio verdadeira.
Se nenhuma condio for verdadeira e foi passado um argumento default, default
retornado. Se nenhuma condio for verdadeira e no foi passado um argumento default,
retornado None.
unichr(nmero)
retorna uma string unicode representando o valor do numero como um caracter
unicode. Funo inversa da ord() para caracteres unicode.
Unicode(string[,encoding[,errors]])
Decodifica a string usando o codificador para codificar. O tratamento de erros
feito de acordo com o argumento errors. Funo inicialmente para decodificar UTF-8 no
modo estrito, significando que os erros de codificao gera uma exceo do tipo
ValueError
Atributos:
None
O objeto none equivalente ao objeto none do Python. Usualmente representa um
valor nulo ou falso.
Fundamentos do Zope 97
Veja Tambm:
string module
random module
math module
sequence module

if: Teste Condicional

A tag if permite que se teste condies e a partir deste, podemos realizar diferentes
aes. Semelhante ao if/elif/else do Python
Sintaxe:

<dtml-if VariaveldeCondio | expr=ExpressodeCondio>
[<dtml-elif VariaveldeCondio | expr=ExpressodeCondio>]
...
[<dtml-else>]
</dtml-if>

Pode-se testar ou uma varivel ou uma expresso. Se a varivel ou a expresso
avaliada como verdadeira, ento o bloco do if executado. Ser avaliado como
verdadeiro se no for zero, no for uma string vazia ou uma lista vazia. Se a varivel no
for encontrada, ento avaliada como falsa.
Se a condio inicial falsa, cada condio do elif testada na ordem. Se alguma
condio elif verdadeira, o seu bloco executado. Por final o bloco opcional else
executado se nenhuma das condies if e elif so verdadeiras. Somente um bloco sera
executado.

Exemplos:
Teste para uma varivel:
<dtml-if snake>
A variavel snake e verdadeira
</dtml-if>
Teste para expresses:
<dtml-if expr=num >5>
num maior que 5
<dtml-elif expr=num <5>
num menor que 5
<dtml-else>
num igual a 5
Fundamentos do Zope 98
</dtml-if>

in: Loop sobre uma sequncia
Esta tag permite que voc varra uma sequncia item por item, inclusive realizando
aes sobre os itens

Sintaxe:
<dtml-in SequenceVariable | expr=SequenceExpression>
[<dtml-else>]
</dtml-in>

O bloco da tag dtml-in ser executado uma vez para cada item pertencente a
SequenceVariable (Varivel) ou a SequenceExpression (sequncia na expresso). O item
corrente colocado no DTML namespace durante cada execuo do bloco.

Atributos:
mapping
Realiza iterao sobre os objetos ao invs de suas instncias. Permite que se
acesse os valores dos objetos como se fossem variveis DTML.

Reverse
Inverte a sequencia

sort=string
ordena a sequencia segundo o atributo name (nome)

start=int
O nmero do item que deve ser considerado como comeo. Os itens de uma
sequncia so numerados a partir do nmero 1.

end=int
O nmero do ltimo item que deve ser mostrado. Os itens de uma sequncia so
numerados a partir do nmero 1.

size=int
A quantidade de itens que devem ser processados, so considerados um grupo.

skip_unauthorized
Fundamentos do Zope 99
No gera uma exceo se um item de acesso restrito encontrado.

ophan=int
Especifica o tamanho mnimo de um grupo de itens de uma sequencia. Controla
quais sequencias devem ser separadas em grupos. Se um grupo possuir menos
elementos que o especificado no atributo orphan, ento no realizada nenhuma
separao, e um grupo com tamanho maior que tamanho especificado do grupo
realizada a separao.
Por exemplo, se tamanho da sequncia 12, o tamanho do grupo 10 e o orphan
3, ento o resultado um grupo com todos os 12 itens, pois separar os itens em dois
grupos resultaria num grupo menor que o tamanho especificado no orphan.
O valor default 0

overlap=int
nmero de itens que devem ser sobrepostos entre os grupos. O valor padro sem
overlap

previous
realiza uma iterao se existe um grupo anterior. Atualiza a variavel do grupo para
a sequencia anterior.

next
realiza uma iterao se existe um prximo grupo. Atualiza a varivel do grupo para
a prxima sequncia

prefix=string
Fornece verses de tags que comeam com o prefixo passado ao invs de
sequence, e que usa underscores ao invs de hfem. O prefixo deve comear com uma
letra e conter somente caracteres alfanumricos e underscores.

sort_expr=expression
Ordena a sequncia segundo o nome do atributo com valor igual ao da expresso
passada. Permite que se ordene diferentes atributos.

reverse_expr=expression
inverte a sequencia se a expresso avaliada como verdadeira. Permite que voc
inverta a sequencia segundo uma condio.

Tags para variveis
Fundamentos do Zope 100
Variveis para itens correntes
Essas variveis abaixo descrevem o item corrente

sequence-item
referencia o item corrente

sequence-key
A key corrente. Quando se varre t-uplas da forma (key, value), o tag dtml-in
interpreta como (sequence-key,sequence-item)

sequence-index
o indice do item corrente comeando do 0

sequence-number
o indice do item corrente comeando do 1

sequence-roman
o indice do item corrente em numeral romano representado em minsculas

sequence-Roman
o indice do item corrente em numeral romano representado em maisculas

sequence-letter
o indice do item corrente representado atravs de letras em minsculas

sequence-Letter
o indice do item corrente representado atravs de letras em maisculas

sequence-start
Verdadeiro se o item corrente o primeiro da sequencia

sequence-end
Verdadeiro se o item corrente o ltimo da sequencia

sequence-even
Verdadeiro se o item corrente possui indice par
Fundamentos do Zope 101

sequence-odd
Verdadeiro se o item corrente possui indice impar

sequence-lenght
o tamanho de uma sequencia

sequence-var-variable
Para se acessar a variavel de um item corrente. Por exemplo, sequence-var-title
referencia a variavel title do item corrente. Normalmente podemos acessar essa varivel
diretamente desde que o item corrente colocado no DTML namespace. Essas variveis
so bastante teis para se mostrar informaes dos grupos anteriores e dos prximos.

sequence-index-variable
O indice da varivel do item corrente.
Variveis de Sumrio
variveis que retornam informaes sobre as variveis. Para se usar essas
variveis necessrio se varrer os objetos.

total-variable
Retorna o nmero total de ocorrncias dessa varivel

count-variable
Nmero de ocorrncias dessa varivel
min-variable
O menor valor de uma varivel
max-variable
O maior valor de uma varivel
mean-variable
A mdia de uma varivel
variance-variable
A variao de uma varivel com count-1 graus livres
variance-n-variable
A variao de uma varivel com n graus livres
standard-deviation-variable
Desvio padro de uma varivel com count-1 graus livres
standard-deviation-n-variable
Fundamentos do Zope 102
Desvio padro de uma varivel com n graus livres

Agrupando Variveis
Essas variveis permitem que ache as modificaes em variveis
first-variable
verdadeiro se o item corrente o primeiro segundo a variavel especificada
last-variable
verdadeiro se o item corrente o ltimo segundo a variavel especificada

Variveis de grupo
sequence-query
A string de pesquisa com a varivel start removida. Pode-se usar esta varivel para
construo de links para os grupos anteriores e prximos.
Sequence-step-size
Tamanho do grupo
previous-sequence
verdadeiro se o grupo corrente no o primeiro dos grupos. Note que essa
varivel s ser verdadeira para a primeira iterao.
previous-sequence-start-index
o indice do inicio do grupo anterior
previous-sequence-start-number
o primeiro numero do grupo anterior. Note que o mesmo que previous-sequence-
start-index+1
previous-sequence-end-index
o ltimo indice do grupo anterior
previous-sequence-end-number
o ltimo nmero do grupo anterior. Note que o mesmo que previous-sequence-
end-index+1
previous-sequence-size
O tamanho do grupo anterior
previous-batches
uma sequencia de objetos mapping com informaes sobre todos os grupos
anteriores. Cada objeto tem os atributos batch-start-index, batch-end-index, e batch-size
next-sequence
verdadeiro se o grupo corrente no o ltimo dos grupos. Note que essa varivel
s ser verdadeira para a ltima iterao.
next-sequence-start-index
Fundamentos do Zope 103
o indice do inicio da prxima sequencia
next-sequence-start-number
o primeiro numero da prxima sequencia. Note que o mesmo que next-sequence-
start-index+1
next-sequence-end-index
o ltimo indice da proxima sequencia
next-sequence-end-number
o ltimo nmero da proxima sequencia. Note que o mesmo que next-sequence-
end-index+1
next-sequence-size
O tamanho do proxmo indce
next-batches
uma sequencia de objetos mapping com informaes sobre todos os grupos
posteriores. Cada objeto tem os atributos batch-start-index, batch-end-index, e batch-size
Exemplos:
Varrendo sub-objetos
<dtml-in objectValues>
titulo: <dtml-var title><br>
</dtml-in>
Varrendo sobre dois grupos, usando prefixos:
<dtml-let rows=(1,2,3) cols=(4,5,6)>
<dtml-in rows prefix=row>
<dtml-in cols prefix=col>
<dtml-var expr=row_item * col_item><br>
<dtml-if col_end>
<dtml-var expr=coltotal_item * row_mean_item>
</dtml-if>
</dtml-in>
</dtml-in>
</dtml-let>

Varrendo sbre uma lista do tipo (key,value) t-upla:
<dtml-in objectitems>
id: <dtml-var sequence-key>, ttulo: <dtml-var title><br>
</dtml-in>

Fundamentos do Zope 104
Criando uma tabela com linhas com cores alternadas:
<table>
<dtml-in objectvalues>
<tr <dtml-if sequence-odd>bgcolor=#EEEEEE
<dtml-else>bgcolor=#FFFFFF>
</dtml-if>
<td><dtml-var title></td>
</tr>
</dtml-in>
</table>

Processamento de grupos:
<p>
<dtml-in largeSequence size=10 start=start previous>
<a href="<dtml-var absolute_url><dtml-var sequence-query>start=<dtml-var
previous-sequence-start-number>">Anterior</a>
</dtml-in>

<dtml-in largeSequence size=10 start=start next>
<a href="<dtml-var absolute_url><dtml-var sequence-query>start=<dtml-var
next-sequence-start-number>">Prximo</a>
</dtml-in>
</p>

<p>
<dtml-in largeSequence size=10 start=start>
<dtml-var sequence-item>
</dtml-in>
</p>

Este exemplo cria links de navegao prximo e anterior para acessar os diferentes
grupos. Note que usando sequence-query, no se perde nenhuma varivel GET quando
se navega entre os grupos.

let: Define variveis DTML
Tag que define variveis no DTML namespace

Fundamentos do Zope 105
Sintaxe:
<dtml-let [Name=Variable] [Name=Expresso]...>
</dtml-let>
A tag let uma tag de bloco. Variveis so definidas por argumentos de tags.
Variveis definidas so colocadas no DTML namespace enquanto o bloco let
executado. Variveis so deifinidas pelos atributos. A tag let pode ter um ou mais
atributos com nomes arbitrrios. Se o atributo definido com aspas duplas, so
considerados expresses, se outra forma so acessados pelos nomes. Atriutos so
processados na ordem, ento antigos atributos podem referenciar e/ou sobrescrever os
novos.

Exemplo:
Uso Bsico

<dtml-let name="'Bob'" ids=objectIds>
nome: <dtml-var name>
ids: <dtml-var ids>
</dtml-let>


Usando a tag let com a tag in:
<dtml-in expr="(1,2,3,4)">
<dtml-let num=sequence-item
index=sequence-index
result="num*index">
<dtml-var num>* <dtml-var index>=<dtml-var result>
</dtml-let>
</dtml-in>


Isso Retorna:
1 * 0 =0
2 * 1 =2
3 * 2 =6
4 * 3 =12

mime: Formata os dados com MIME
Fundamentos do Zope 106
Permite que se crie dados codificados com MIME. Usado na formatao do contedo
do e-mail dentro da tag sendmail.

Sintaxe:
<dtml-mime>
[<dtml-boundry>]
...
</dtml-mime>
A tag mime uma tag de bloco. O bloco pode ser dividido em uma ou mais boundry
tags para se criar uma mensagem MIME constituda de mltiplas partes. comunmente
usada dentro da tag sendmail.

Atributos:
As tags mime e boundry tem os mesmos atributos]
encode=string
MIME Content-Transfer-Encoding Header, o padro base64. Opes de
codificao vlidas incluem base64, quoted-printable, uuencode,x-uuencode, uue, x-uue,
e 7bit. Se o atributo encode for 7bit ento nenhuma codificao feita no bloco e
assumido que os dados esto em um formato vlido MIME.
type=string
MIME cabealho de Contedo-tipo.
type_expr=string
MIME cabealho de Contedo-tipo como uma expresso varivel. Voc no pode
usar ambos type e type_expr
name=string
MIME nome de cabealho de Contedo-tipo.
name_expr=string
MIME nome de cabealho de Contedo-tipo como uma expresso varivel. Voc no
pode usar ambos name e name_expr
disposition=string
MIME cabealho de Contedo-disposio.
disposition_expr=string
MIME cabealho de Contedo-disposio como uma expresso varivel. Voc no
pode usar ambos e.disposition disposition_expr
filename=string
MIME filename de cabealho de Contedo-disposio.
filename_expr=string
MIME filename de cabealho de Contedo-disposio como uma expresso varivel.
Voc no pode usar ambos filename e filename_expr
Fundamentos do Zope 107
skip_expr=string
Uma expresso varivel que se verdadeiro, salta o bloco. Voc pode usar este
atributo para incluir seletivamente blocos MIME.
Exemplos:
Enviando um arquivo em anexo:
<dtml-sendmail>
Para: <dtml-recipiente>
Assunto: Currculo
<dtml-mime type =text/plain encode =7bit>

Oi, por favor d uma olhada em meu currculo.

<dtml-boundary type="application/octet-stream" disposition="attachment"
encode="base64" filename_expr="resume_file.getId()">
<dtml-var expr="resume_file.read()"></dtml-mime>
</dtml-sendmail>

Veja tambm:
Biblioteca de Python: mimetools

raise: Gerando uma exceo
A tag gera uma exceo, igual a declarao na linguagem Python.
Sintaxe:
<dtml-raise ExceptionName|ExceptionExpression>
</dtml-raise>
uma tag de bloco, raise gera uma exceo. Excees podem ser uma classe de
exceo ou uma string. So passados os contedos da tag como o valor de erro.
Exemplos:
Gerando um KeyError:
<dtml-raise KeyError>
</dtml-raise>
Gerando um HTTP 404 erro:
<dtml-raise NotFound>Pgina no encontrada</dtml-raise>
Veja Tambm:
Try tag
Python Tutorial: Erros e Excees
return: retorna dados
Fundamentos do Zope 108
A tag deixa de executar DTML e devolve dados. Igual a declarao return no Python.
sintaxe:
<dtml-return ReturnVariable|expr="ReturnExpression">
Para a execuo do DTML e retorna uma varivel ou expresso. A sada do DTML
no retornada. Normalmente uma expresso de retorno mais til que uma varivel de
retorno. Scripts so mais usados que esta tag.
Exemplos:
Devolvendo uma varivel:
<dtml-return result>
Devolvendo um dicionrio de Python:
<dtml-return expr="{'hi':200, 'lo':5}">
sendmail: Envia e-mail com SMTP
A tag envia uma mensagem de e-mail que usa SMTP.
Sintaxe:
sendmail tag sintaxe:
<dtml-sendmail>
</dtml-sendmail>
A tag sendmail uma tag que cerca um bloco. Requer o argumento ,mailhost ou
smtphost, mas no ambos. O bloco da tag enviado como uma mensagem de e-mail. O
comeo do bloco descreve os cabealhos de e-mail. Os cabealhos esto separados do
corpo por uma linha em branco. Alternadamente os cabealhos para, de e assunto,
podem ser fixados com argumentos da tag
Atributos:
mailhost
O nome de um objeto Zope MailHost para enviar e-mail. Voc no pode especificar
um mailhost e um smtphost.
smtphost
O nome de um servidor de SMTP utilizado para enviae o e-mail. Voc no pode
especificar um mailhost e um smtphost.
port
Se o atributo de smtphost for usado, ento o atributo port usado para especificar um
nmero de porto para conectar. Se no especificou, ento a porta 25. ser usada.
mailto
O endereo de e-mail ou uma lista de endereos de e-mail separadas por vrgulas.
Isto tambm pode ser especificado com o cabealho To
mailfrom
O endereo de remetente. Isto tambm pode ser especificado com o cabealho from.
assunto
Fundamentos do Zope 109
O assunto de e-mail. Isto tambm pode ser especificado com o cabealho subject.
Exemplos:
Enviando uma mensagem de e-mail usando um mail host
<dtml-sendmail mailhost="mailhost">
Para: <dtml-var recipient>
De: <dtml-var sender>
Assunto: <dtml-var subject>
Dear <dtml-var recipient>,
You order number <dtml-var order_number>is ready.
Please pick it up at your soonest convenience.
</dtml-sendmail>
Veja tambm:
RFC 821 (SMTP Protocol)
mime tag
sqlgroup: Formata expresses complexas de SQL
A tag sqlgroup formata expresses booleanas complexas de SQL. Voc pode usar
isto junto com a tag sqltest para construir comandos de SQL dinmicas. Esta tag usada
em Mtodos SQL.
Sintaxe:
<dtml-sqlgroup>
[<dtml-or>]
[<dtml-and>]
...
</dtml-sqlgroup>
uma tag que cerca um bloco. dividido em blocos com um ou mais opcional or e
and tags.Tags sqlgroup podem ser aninhadas para produzir uma lgica complexa.
Atributos:
required=boolean
Indica se o grupo requerido. Se no requerido e no contm nada, excludo da
sada do documento DTML.
where=boolean
Se verdadeiro, inclui a string "where". Isso til para a tag sqlgroup em uma query
SQL.
Exemplos:
select * from empregados
<dtml-sqlgroup where>
<dtml-sqltest salario op="gt" type="float" optional>
Fundamentos do Zope 110
<dtml-and>
<dtml-sqltest nome type="nb" multiple optional>
<dtml-and>
<dtml-sqltest sobrenome type="nb" multiple optional>
</dtml-sqlgroup>

Se o nome J oca e o sobrenome Silva ou Santos
select * from empregados
where
(nome ='J oca'
e
sobrenome in ('Silva', 'Santos') )

Se o salrio 50000 e o sobrenome Silva
select * from empregados
where
(salario >50000.0
and
sobrenome='Silva')

Tags sglgroups aninhadas

select * from empregados
<dtml-sqlgroup where>
<dtml-sqlgroup>
<dtml-sqltest nome op="like" type="nb">
<dtml-and>
<dtml-sqltest sobrenome op="like" type="nb">
<dtml-sqlgroup>
<dtml-or>
<dtml-sqltest salario op="gt" type="float">
</dtml-sqlgroup>

Dando alguns argumentos, este modelo de SQL fica:
select * from empregados
where
Fundamentos do Zope 111
( (
nome like 'A*'
and
sobrenome like 'Silva' )
or salario >20000.0 )
Veja tambm:
sqltest tag

sqltest: Formata Testes Condicionais em SQL
A tag sqltest insere um teste de condio no cdigo SQL. Testa uma coluna de uma
tabela contra uma varivel. Esta tag usada em Mtodos de SQL.
Sintaxe:
<dtml-sqltest Variable|expr="VariableExpression">
A tag sqltest no cerca um bloco. Ela Insere uma declarao de teste de condio
SQL. usado para construir instrues de SQL. A varivel nomeada ou expresso
varivel testada contra uma coluna de uma tabela, usando uma operao de
comparao especificada.
Atributos:
type=string
O tipo da varivel. Tipos vlidos so: string, int, float e nb. Nb =string no vazia,
deveria ser usado em vez da string a menos que voc queira testar strings vazias. O
atributo de tipo requerido e usado a apropriadamente para ignorar uma varivel
inserida.
column=string
O nome da coluna da tabela SQL para testar contra. Este atributo tem como padro o
nome da varivel.
multiple=boolean
Se verdadeiro, ento a varivel pode ser uma sequncia de valores para testar contra
a coluna da tabela.
optional=boolean
Se verdadeiro, ento o teste opcional e no ser feito se a varivel estiver vazia ou
no existir.
op=string
A operao de comparao. Comparaes vlidas so:
eq: igual a
gt: maior que
lt: menor que
ne: diferente a
Fundamentos do Zope 112
ge: maior que ou igual a
le: menor que ou igual a
Se no especificado o padro a comparao igual a. Se a comparao no
reconhecida, ela usada assim mesmo. Portanto pode-se usar comparaes como like.
Exemplos:
Uso bsico:
select * from empregados
where <dtml-sqltest nome type="nb">

Se a varivel J oca ento temos a seguinte instruo SQL:

select * from empregados
where name ='J oca'

Mltiplos Valores:

select * from empregados
where <dtml-sqltest empid type=int multiple>

Se a varivel empid (12,14,17), ento temos a seguinte instruo SQL:
select * from empregados
where empid in (12, 14, 17)
Veja tambm:
tag sqlgroup
tag sqlvar
sqlvar: Insere variveis SQL
A tag sqlvar insere variveis no cdigo SQL. Esta tag usada em Mtodos de SQL.
Sintaxe
sqlvar tag sintaxe:
<dtml-sqlvar Variable|expr =VariableExpression>
A tag sqlvar no cerca um bloco. Assim como a tag var, a tag sqlvar procura a
varivel e a insere. Ao contrrio da tag var, as opes de formato so prrpias para
cdigo de SQL.
Atributos
type=string
O tipo da varivel. Tipos vlidos incluem: string, int, float e nb. Nb = string no vazia
e deve ser usado no lugar de string, a menos que voc queira usar strings vazias. O
Fundamentos do Zope 113
atributo de tipo requerido e usado a apropriadamente para ignorar uma varivel
inserida.
optional=boolean
Se verdadeiro e a varivel nula ou no existente, ento nada inserido.
Exemplos
Uso bsico:
select * from empregados
where nome=<dtml-sqlvar nome type="nb">

Este SQL cita a varivel string nome.
Tambm veja
sqltest tag
tree: insere uma rvore widget
Widget so elementos de interface para o usurio tipo botes, campos de texto, etc.
A tag exibe uma rvore widget dinmica que examina os objetos do Zope.
Sintaxe
tree tag sintaxe:
<dtml-tree [VariableName|expr="VariableExpression"]>
</dtml-tree>

A tag tree cerca um bloco. Apresenta dinmicamente uma arvore com widget em
HTML. A raiz da rvore determinada pelo nome da varivel ou expresso, se presente,
caso contrrio o padro o objeto corrente. O bloco da tag tree feito para cada n da
rvore, com o n corrente colocado no namespace DTML.
Estado de rvore setado atravs de cookies HTTP. Assim para utilizar rvores,
deve ser habilitados os cookies. Voc pode tambm ter s uma rvore por pgina.
Atributos
branches=string
Procura entre os galhos da rvore chamando pelo mtodo nomeado. O mtodo
padro o tpValues que a maioria dos objetos Zope suportam.
branches_expr=string
Procura entre os galhos da rvore avaliando a expresso.
id=string
O nome de um mtodo ou id para determinar o estado de rvore. O padro tpId
para o qual a maioria dos objetos Zope suportam. Este atributo para uso avanado.
url=string
O nome de um mtodo ou atributo para determinar itens URLs na rvore.O padro
tpURL para o qual a maioria dos objetos Zope suportam. Este atributo para uso
Fundamentos do Zope 114
avanado.
leaves=string
O nome de um Documento ou Mtodo DTML usado para mostrar os ns que no tm
nenhum filho. Nota: este documento deve comear com <dtml-var standard_html_header>
e terminar com <dtml-var standard_html_footer>para assegurar a correta exibio na
rvore.
header=string
O nome de um Documento ou Mtodo DTML exibido antes dos ns da rvore serem
expandidos. Se o cabealho no achado, saltado.
footer=string
O nome de um Documento ou Mtodo DTML exibido depois dos ns da rvre serem
expandidos. Se o footer no achado, saltado.
nowrap=boolean
Se verdadeiro, ento retifica ento em lugar de envoltura, Os ns da rvore podem
ser truncados para ajustar o tamanho ao espao disponvel.
sort=string
Ordena os galhos da rvore pelo atributo passado.
reverse
Inverte a ordem dos galhos.
assume_children=boolean
Assume que os ns tm filhos. Isto til se para buscar e examinar ns filhos for um
processo custoso. Isto resulta que desenhada caixas de expanso de ns prximo a
todos os ns.
single=boolean
Permite expandir somente um galho da rvore de cada vez. Quando voc expande
um novo galho, todos os outros galhos expandidos so fechados.
skip_unauthorized
Deixa de mostrar os galhos para o qual o usurio no tem permisso ao invs de
gerar um erro.
urlparam=string
Uma string de instrues que includo o se expandir e contrair os links do widget.
Este atributo para uso avanado.
prefix=string
Prove verses das variveis da tag que comeam com este prefixo em vez de " tree ",
e aquele que usa sublinha (_) em vez de hifens (-). O prefixo tem que comear com uma
letra e tem que conter s carteres alfanumricos ou sublinha (_).
Variveis:
tree-item-expanded
Verdadeiro se o n corrente est expandido.
Fundamentos do Zope 115
tree-item-url
A URL do n corrente.
tree-root-url
A URL do n raiz.
tree-level
O nvel do n corrente. Ns do topo tm nvel igual zero.
tree-colspan
O nmero de nveis mais baixos que a rvore que est sendo mostrada possue. Esta
varivel pode ser usada conjuntamente com a varivel tree-level para calcular a
quantidade de linhas e colunas de uma tabela, quando inserimos linhas de uma tabela na
tabela da arvore.
tree-state
O estado de rvore expressado como uma lista de id e sub-listas de ids. Esta varivel
para uso avanado.
Variveis de Controle:
Voc pode controlar a tag da rvore alterando estas variveis.
expand_all
Se esta varivel verdadeira, a rvore inteira expandida.
collapse_all
Se esta varivel verdadeira, a rvore inteira contrada.
Exemplos:
Exibe uma rvore com base no objeto corrente:
<dtml-tree>
<dtml-var title_or_id>
</dtml-tree>

Exibe uma rvore com base em outro objeto, usando um mtodo particular de
procura:
<dtml-tree expr="folder.object" branches="objectValues">
Id do N : <dtml-var getId>
</dtml-tree>

try: Tratando excees
A tag try permite que se trate excesses em DTML, equivalentemente ao tratamento
das construes Python try/except e try/finally
Sintaxe:
A tag try tem duas sintaxes diferentes, try/except/else e try/finally
Fundamentos do Zope 116
try/except/else
Sintaxe:
<dtml-try>
<dtml-except [ExceptionName] [ExceptionName]...>
...
[<dtml-else>]
</dtml-try>

A tag try inclui um bloco no qual podem ser capturadas as excees e ser tratadas.
Pode haver uma ou mais tags que tratam zero ou mais excees. Se uma tag except no
especificar uma exceo, ento todas as excees so tratadas.
Quando uma exceo gerada, passado o controle para a primeira tag except que
trata a exceo. Se no houver nenhuma tag except para tratar a exceo, ento a
exceo gerada normalmente.
Se nenhuma exceo gerada, e h uma tag else, ento a tag else ser executada
depois do corpo da tag try.
As tags except e else so opcionais.
try/finally
Sintaxe:
<dtml-try>
<dtml-finally>
</dtml-try>

A tag finally no pode ser usada no mesmo bloco do try como as tags except e else.
Se houver uma tag finally, seu bloco ser executado sendo ou no gerada uma exceo
no bloco try.
Atributos:
except
Zero ou mais nomes de exceo. Se nenhuma exceo listada ento a tag except
tratar todas as excees.
Variveis tag
Estas variveis podem ser definidas dentro do bloco da tag except.
error_type
O tipo de exceo.
error_value
O valor da exceo.
error_tb
The traceback.
Fundamentos do Zope 117
Exemplos
Pegando um erro de matemtica:
<dtml-try>
<dtml-var expr="1/0">
<dtml-except ZeroDivisionError>
Voc tentou dividir por zero.
</dtml-try>

Retornando informaes sobre a exceo tratada:
<dtml-try>
<dtml-call dangerousMethod>
<dtml-except>
Ocorreu um erro.
Tipo do erro: <dtml-var error_type>
Valor do erro: <dtml-var error_value>
</dtml-try>

Usando a tag finally para se certificar quando um erro gerado ou no:
<dtml-call acquireLock>
<dtml-try>
<dtml-call someMethod>
<dtml-finally>
<dtml-call releaseLock>
</dtml-try>
Veja tambm:
raise tag
Python Tutorial: Erros e Excees
Python Built-in Exceptions
unless: Testa uma condio
A tag unless prov um atalho para testar condies negativas. Para uma condio de
teste mais completa use a tag if.
Sintaxe da tag unless:
<dtml-unless ConditionVariable|expr="ConditionExpression">
</dtml-unless>
A tag unless uma tag que cerca um bloco. Se a varivel de condio ou expresso
avaliada como falso, ento o bloco contido na tag executado. Como a tag if, variveis
Fundamentos do Zope 118
que no esto presentes so consideradas falsas.
Exemplos:
Testando uma varivel:
<dtml-unless testMode>
<dtml-call dangerousOperation>
</dtml-unless>
O bloco ser executado se no existe o testmode, ou se existe mas falso.
Veja tambm:
A tag if
var: Insere uma varivel
A tag var permite uqe voc insira variveis na sada do DTML.
Sintaxe:
Sintaxe da tag var:
<dtml-var Variable|expr="Expression">
A tag var uma tag simples, que no cerca um bloco. A tag var encontra uma
varivel procurando no DTML namespace, que normalmente consiste no objeto corrente,
os containers do objeto corrente, e finalmente no web request. Se a varivel achada,
inserida na sada do DTML. Se no achada, o Zope gera um erro.
Sintaxe da tag de entidade var:
&dtml-variableName;
Sintaxe da entidade uma forma reduzida de se incluir uma varivel. til ao inserir
variveis em tags de HTML.
Sintaxe da entidade tag var com atributos:
&dtml.atributo1[.atributo2]...-variableName;
De forma limitada voc pode especificar atributos com a sintaxe de entidade. Voc
pode incluir zero ou mais atributos delimitados por perodos. Voc no pode prover
argumentos para atributos que usam a sintaxe de entidade. Se voc prover zero ou mais
atributos, ento a varivel no ser adaptada ao HTML automaticamente. Ao invs voc
pode evitar as adaptaes da HTML com esta sintaxe, &dtml.-variableName;.
Atributos:
html_quote
Converte carteres que tm significado especial em HTML para entidades de
caracteres HTML
missing=string
Especifica um valor padro no caso do Zope no encontrar a varivel.
fmt=string
formata uma varivel. Zope fornece alguns formatos inclusive o formato C-style para
strings. Para mais informaes sobre formato C-style para strings, veja a Biblioteca de
Referncia Python. Se o formato da string no for um formato existente, ento assumido
Fundamentos do Zope 119
que um mtodo do objeto, e chamado.
whole-dollars
Formata a varivel com a representao da moeda em dlar.
dollars-and-cents
Formata a varivel com a representao da moeda em dlar e centavos.
collection-lenght
O comprimento da varivel, assumindo que se trata de uma sequencia.
structed-text
Formata a varivel como Texto Estruturado. Para mais informao sobre Texto
Estruturado (structed-text) veja Structured Text How-To no web site Zope.org.
null=string
Um valor padro que ser usado se a varivel None (nula).
lower
Letras maisculas so convertidas para minsculas.
upper
Letras minsculas so convertidas para maisculas.
capitalize
Coloca o primeiro carter da palavra inserida em maiscula.
spacify
Substitui underscores (sublinhas) por espaos em branco
thousands_commas
Insere vrgula a cada trs digitos esquerda de um ponto decimal em valores que
contm nmeros. por exemplo. 12000 convertido em 12,000
url
Insere a URL do objeto, chamando seu mtodo absolute_url.
url_quote
Converte carteres que tm significado especial em URLs para caracteres de
entidade HTML.
url_quote_plus
Equivalente a url_quote, porm tambm converte os espaos no caracter +.
sql_quote
Converte aspas simples em aspas duplas. Isto preciso par incluir valores em strings
de SQL.
newline_to_br
Converte caracteres de nova linha (inclusive o caracter nova linha com retorno) em
tags HTML de mesma funo.
size=arg
Fundamentos do Zope 120
Trunca a varivel a um determinado comprimento (Nota: se houver um espao na
segunda metade da string truncada, ento a string truncada logo aps o espao).
etc=arg
Especifica uma string que acrescentada no final de uma string que foi truncada
(fixando o atributo size listado acima).O padro ...
Exemplos:
Inserindo uma varivel simples em um documento:
<dtml-var standard_html_header>
Truncamento:
<dtml-var cores size=16 etc=", etc.">
produzir seguinte sada se a varivel cores for a string 'vermelho amarelo verde':
amarelo vermelho, etc.
Formatando uma string em C-style:
<dtml-var expr="23432.2323" fmt="%.2f">
resulta em:
23432.23
Inserindo uma varivel, link, dentro de uma tag A de HTML com a sintaxe de
entidade:
<a href="&dtml-link;">Link</a>
Inserindo um link a um documento doc, usando sintaxe de entidade com atributos:
<a href="&dtml.url-doc;"><dtml-var doc fmt="title_or_id"></a>
Este comando cria um link de HTML a um objeto usando sua URL e seu ttulo. Esse
exemplo chama o mtodo absolute_url do objeto para a URL (usando o atributo url) e seu
mtodo title_or_id para o ttulo.
with: Controla a procura de variveis DTML
A tag with coloca um objeto no DTML namespace. Variveis sero procuradas
primeiro no objeto colocado.
Sintaxe:
<dtml-with Variable|expr="Expression">
</dtml-with>
A tag with cerca um bloco. Ela coloca a varivel nomeada ou expresso varivel no
DTML namespace enquanto estiver dentro do bloco with. Assim nomes so procurados
primeiro no objeto que foi colocado.
Atributos:
only
Limita o DTML namespace para incluir somente o objeto definido na tag with.
mapping
Indica que a varivel ou expresso um mapping object (objeto mapeado). Isto
Fundamentos do Zope 121
assegura que variveis so procuradas corretamente no objeto mapeado.
Exemplos:
Procurando uma varivel no REQUEST:
<dtml-with REQUEST only>
<dtml-if id>
<dtml-var id>
<dtml-else>
'id' no est no REQUEST
</dtml-if>
</dtml-with>
Colocando o primeiro objeto no DTML namespace:
<dtml-with expr="objectValues()[0]">
Id do primeiro objeto: <dtml-var id>
</dtml-with>

Veja Tambm:
tag Let