Python – Zope - Python – Zope - PlonePlone
Adolfo BrunoGCUFAL
_____________________________________________
Maceió – 16 de Agosto de 2008
SequênciaSequência
CMSPythonZopePloneAplicação
_____________________________________________
CMSCMSContent Management Content Management
SystemSystem
O que é um CMS?O que é um CMS?
É um gerenciador para websites, portais e
intranets, cujo objetivo é estruturar e facilitar a
criação, administração, distribuição, publicação
e disponibilidade da informação.
_____________________________________________
Sites tendem a crescer desordenadamente
Dar o “poder” da edição ao usuárioReduzir o tempo de publicaçãoPublicação on-linePadronizar interfaces de apresentaçãoSeparar conteúdo, interface e lógicaSegurançaWeb 2.0
Por que usar um CMS?Por que usar um CMS?_____________________________________________
PythonPython
Linguagem de programação de alto nível
Interpretada
Interativa
Orientada a Objetos
Tipagem dinâmica e forte
Portável
Multiparadigma
O que é Python?O que é Python?______________________________________________
Surgiu no Natal de 1989Criada por Guido Van
Rossum nos Países BaixosSucessora da ABCUtilizada no sistema
operacional AmoebaO nome é em homenagem
ao grupo humorístico britânico Monty Python.
História do Python?História do Python?______________________________________________
IndentaçãoIndentação
Não existem blocos de comandos
A Indentação é uma característica peculiar no Python
Em linguagens como C ou PHP os blocos são delimitados por chaves, no Pascal ou Delphi pelo begin e end
______________________________________________
Indentação correta
def valor(self):try:
self.c = input('Valor: ')
c = self.creturn c
except:print 'Inválido!'self.valor()
Indentação Errada
def valor(self):try:self.c = input('Valor: ')c = self.creturn cexcept:print 'Inválido! 'self.valor()
______________________________________________IndentaçãoIndentação
______________________________________________Estruturas de ControleEstruturas de Controle
______________________________________________FunçõesFunções
class ClasseOne:
def __init__(self):self.atribA =
'Atributo A'self.atribB = 10self.atrubC =
Noneself.__privado =
None
def umMetodo(self, arg1):print arg1 +
self.atribB
umaClasse = ClasseOne()
print umaClasse.atribA
umaClasse.umMetodo(2)
______________________________________________ClassesClasses
Atributos e métodos privados sempre têm dois ‘_’ antes do seu nome.
Em Python podemos utilizar herança simples e herança múltipla
A utilização de listas (arrays) em Python é muito simples.
lista = [] # cria lista vazia lista = ['laranja', 'banana', 'uva'] # cria lista com 3
elementos print lista[1] # imprime ‘banana’ lista.append(‘abacaxi'); # adiciona um novo
elemento no final da lista lista. Insert(i, x) # adiciona um elemento x na
posição i lista.remove( x) # remove o elemento x lista[:2] # retorna uma nova lista com os elementos
0 a 2 lista[1:3] # retorna uma nova lista com os elementos
1 a 3
______________________________________________ListasListas
ZopeZope
Servidor de Aplicações criado pela Digital Creations (Zope Corporation)
Liberado fonte em 1998
Interface de administração via broswer
Escrito em Python
Zope (Z Object Publishing Environment)
Servidor web, o Zserver
Banco de dados orientado a objetos, o ZODB
______________________________________________O que é Zope?O que é Zope?
PostgreSQLMySQLFirebirdOracleSQL ServerODBC
______________________________________________Multi SGBDsMulti SGBDs
O Zope suporta conexões com os bancos de dados relacionais mais utilizados no mercado
PlonePlone
Criado em 2001 por Alexander Limi e Alan Runyan
É um CMS open-source que roda sob o servidor de aplicações Zope
Lançado sobre a licença GNUCompatível com a maioria dos navegadores webAdere ao padrões webÉ extensível (através dos produtos)Fácil customização Internacionalizado para ~60 idiomasTradução sensível ao idioma do navegador
______________________________________________O que é Plone?O que é Plone?
1. Passo: Instalar Zlib
1 – tar zxvf zlib-1.2.3.tar.gz2 – ./configure3 – make test4 – make install
2. Passo:
1 – vim /etc/ld.so.conf2 – Adicione: include /usr/local/include 3 – Execute o comando: ldconfig
______________________________________________A instalaçãoA instalação
Verificar se o gcc, g++ e make estão instalados
3. Passo: Instalar o Python
1 – tar zxvf Python-2.4.4.tgz2 – ./configure3 – make4 – make install
______________________________________________A instalaçãoA instalação
4. Passo: Instalar Imaging
1 – tar zxvf Imaging-1.1.6.tar.gz2 - Para instalar a Imaging certifique-se que a libjpeg
está instalada no sistema. Para isso execute o seguinte comando:
whereis libjpeg
Caso a saída seja:
libjpeg:
Significa que a libjpeg não está instalada.
Para instalá-la execute o comando:
apt-get install libjpeg-progs libjpeg62 libjpeg62-dev
______________________________________________A instalaçãoA instalação
3- Agora altere a linha JPEG_ROOT no arquivo setup.py, para isso execute dentro do diretório Imaging-1.1.6:
vim setup.py
Procure pela linha JPEG_ROOT = NONE e a altere para JPEG_ROOT = “/usr/lib”
Salve as alterações. E siga para o próximo passo.
4 – python setup.py install
______________________________________________A instalaçãoA instalação
5. Passo: Instalar o Zope
1 – tar zxvf Zope-2.9.8-final.tgz 2 – ./configure --prefix=/var/zope-2.9.8
--with-python=/usr/local/bin/python 3 – make 4 – make install 5 – useradd zope 6 – chown zope:root /var/zope-2.9.8 -R 7 – /var/zope-2.9.8/bin/mkzopeinstance.py 8 – Informar o seguinte diretório: /var/zope 9 – Informar usuário e senha da instância zope (não do
linux!) 10 – Descomentar e editar no arquivo
/var/zope/etc/zope.conf “effective-user zope” Onde zope é o usuário criado no momento da criação da instância (passo 8)
11 – chmod 755 /var/zope/log 12 – chmod 755 /var/zope/var 13 – chown zope:root /var/zope -R
______________________________________________A instalaçãoA instalação
6. Passo: Instalar o Plone
1 – tar zxvf Plone-2.5.5.tar.gz2 – mv ./Plone-2.5.5 /var/zope/Products3 – chown zope:root /var/zope -R
Para iniciar o zope, execute os seguintes comandos:
Iniciar: /var/zope/bin/zopectl startReiniciar: /var/zope/bin/zopectl restartParar: /var/zope/bin/zopectl stop
______________________________________________A instalaçãoA instalação
O Plone disponibiliza objetos para criação, por
padrão são:Arquivo, Evento, Imagem, Link, Notícia, Pasta,
PastaEsperta, Página.
Assim que é criado algum objeto o Plone atribui uma data de criação;
Um objeto pode atribuir: data (criação, efetivação, expiração, inicial, final), criador, estado (esboço público, publicado, privado, pendente).
______________________________________________Criando conteúdoCriando conteúdo
Arquivo: Enviar arquivo externo para o site;
Evento: Informações de eventos que ficam no calendário;
Imagem: Pode ser referenciada em documentos e exibida em álbuns;
Link: Um link para recursos interno ou externo;
Notícia: Um anúncio que aparecerá no portlet de notícia e na lista de notícia;
Pasta: Pode conter outros itens;
Pasta Esperta: Realiza busca que é atualizada automaticamente e pode exibir itens que casam com um critério especificado;
Página: Pode conter conteúdo, uma página do site.
______________________________________________Objetos e sua diferençasObjetos e sua diferenças
Qual o produto? RichDocument
Onde achar? www.plone.org
Como instalar?Copiar o arquivo descompactado para a pasta
Products;
Reiniciar o servidor;
Ir ao site > Configuração do site > Adicionar remover
produtos. E instalar o produto.Ou então,Ir na ZMI -> Portal Quickinstaller -> Escolher o
produto e instalar.
______________________________________________Instalando ProdutosInstalando Produtos
http://localhost:8080/manage
portal_actionsportal_catalogportal_propertiesportal_quickinstallerportal_skinsportal_typesportal_workflowportal_cssportal_javascripts
______________________________________________
Ferramentas do Plone no Ferramentas do Plone no ZopeZope
Responsável pelo cadastro e alteração de ações do portal, por exemplo: site_actions, document_actions, portal_tabs;
Title = TítuloId = Identificação únicaURL = Caminho para script/página que será
executadoPermission = Permissão necessária para
executar a açãoCategory = Categoria que a ação pertenceVisible = É visível ou não
______________________________________________portal_actionsportal_actions
Baseado no ZCatalog do ZOPE;
Indexa todos os objetos do Plone;
Adiciona índices, metadados e políticas que facilitam a busca de objetos no Plone;
______________________________________________portal_catalogportal_catalog
Define as principais propriedades para a árvore de navegação e também para o site em geral;
______________________________________________portal_propertiesportal_properties
Responsável por adicionar e remover produtos Plone;
______________________________________________portal_portal_quickinstallerquickinstaller
Localização dos templates do Plone e dos produtos;
______________________________________________portal_portal_skinsskins
Gerencia os tipos de objetos do Plone
Aba Contents -> Lista todos os tipos de objetos
Properties -> Detalhes do objetoActions -> Ações possíveis de executar
pelo objetoAba Aliases -> Determina os templates
de Visão,Edição, Propriedades, compartilhamento
dos objetos;
______________________________________________portal_portal_typestypes
Determina o workflow para cada objeto do Plone
Aba Workflow -> Determina o workflow do portal_type
Aba Contents -> Lista os workflows existentes
______________________________________________portal_portal_workflowworkflow
Em portal_css são registrados todos os css do plone;
Em portal_javascripts são registrados todos os javascripts do plone;
______________________________________________
portal_portal_css - css - portal_portal_javascriptsjavascripts
Zope Page Templates (ou linguagem de templates Zope) é um instrumento do servidor de aplicação Zope para a geração de páginas web dinâmicas.
O objetivo é proporcionar um fluxo de tarefas natural entre designers e programadores.
______________________________________________
Zope Page Templates Zope Page Templates (ZPT)(ZPT)
DTML “Document Template Markup Language” (Linguagem de Marcação para Modelos de Documentos) é a linguagem de apresentação e script baseada em tag do Zope.
Podemos usar o DTML em dois tipos de objetos no Zope, DTML Documents e DTML Methods
DTML sofre por uma deficiência para separarapresentação, lógica e conteúdo (dados).
O namespace do DTML adiciona muita “mágica”, sem permitir controle suficiente.
______________________________________________ZPT x DTMLZPT x DTML
Page Templates usam a Template Attribute Language (TAL). TAL consiste em atributos especiais para as tags HTML. Por exemplo, um titulo dinâmico de uma página deveria ficar assim:
<title tal:content="here/title">Page Title</title>
______________________________________________ZPT na práticaZPT na prática
Para criar um Page Template vamos até a ZMI:
Em seguida:
______________________________________________ZPT na práticaZPT na prática
______________________________________________ZPT na práticaZPT na prática
<html><body>
<p>Esse é o <b tal:content="template/title">título</b>
</p></body>
</html>
______________________________________________
ZPT na prática - ZPT na prática - ExpressõesExpressões
A expressão, "template/title" do exemplo anterior é uma expressão de caminho ou path expression. Esse é o tipo mais comum de expressão.
Outras expressões:
'request/URL': A URL da requisição web atual. 'user/getUserName': O nome do usuário
autenticado. 'container/objectIds': Uma lista dos ids dos
objetos que estão na mesma pasta do template.
______________________________________________
ZPT na prática - ZPT na prática - Comandos TALComandos TAL
______________________________________________ZPT na práticaZPT na prática
No Page Template que criamos, a linha:
Esse é o <b tal:replace="template/title"> título</b>
Renderizou:Esse é o Meu Template.
Portanto,
A tag <b> foi trocado pelo valor de “template/title”
______________________________________________ZPT na práticaZPT na prática
Outra maneira de inserir texto é com a instrução:
tal:content
Uso similar ao tal:replace, porém o a tag não éremovida e o valor é inserido dentro dela;
Ex.:<head><title tal:content="template/title">Titulo</title></head>
______________________________________________ZPT na prática ZPT na prática - - Repetindo Repetindo estruturasestruturas
<table border="1" width="100%">
<tr>
<th>Número</th>
<th>Id</th>
<th>Meta-Type</th>
<th>Titulo</th>
</tr>
<tr tal:repeat="item container/objectValues">
<td tal:content="repeat/item/number">#</td>
<td tal:content="item/getId">Id</td>
<td tal:content="item/meta_type">Meta-Type</td>
<td tal:content="item/title">Title</td>
</tr>
</table>
______________________________________________ZPT na prática ZPT na prática - - Repetindo Repetindo estruturasestruturas
A instrução tal:repeat na linha da tabela significa “repita essa linha para cada item na minha lista de objetos do container”.
A instrução coloca os objetos da lista na variável item, um de cada vez (essa variável é conhecida como variável de repetição), e faz uma copia da linha usando essa variável.
O valor de "item/getId" em cada linha é o id do objeto para a linha, e também como em "item/meta_type" e "item/title".
______________________________________________ZPT na prática – ZPT na prática – Elementos Elementos condicionaiscondicionais
Usando a instrução tal:condition podemos checarvários tipos de condições.
tal:condition deixa a tag e seu conteúdo no lugar se a
expressão é verdadeira, mas remove-os se for falsa.
O Zope considera o numero zero, uma string embranco, uma lista vazia, e a variável de ambientenothing como falsos valores.
Sendo assim quase todos outros valore sãoconsiderados como verdadeiros, incluindo númerosdiferentes de zero, e strings com algum valor (atémesmo espaços em branco!).
______________________________________________ZPT na prática – ZPT na prática – Elementos Elementos condicionaiscondicionais
<div tal:define=“items container/objectValues”><table tal:condition= "items" border="1" width="100%">
<tr><th>Número</th><th>Id</th><th>Meta-Type</th><th>Titulo</th>
</tr><tr tal:repeat="item items">
<td tal:content="repeat/item/number">#</td>
<td tal:content="item/getId">Id</td><td tal:content="item/meta_type">Meta-
Type</td><td tal:content="item/title">Title</td>
</tr></table>
</div>
______________________________________________ZPT na prática – ZPT na prática – Controle de Controle de atributosatributos
É possível alterar os atributos das tags através instrução tal:attributes
Ex.:<a href="link" tal:attributes="href
here/getILink; ">link</a>
Resultado:<a href= "linkToSomeWhere">link</a>
______________________________________________
ZPT na prática – ZPT na prática – Definindo Definindo variáveisvariáveis
Você pode definir suas próprias variáveis usando a
instrução: tal:define;
Ex.:
<ul tal:define="items container/objectIds" tal:condition="items"><li tal:repeat="item items">
<p tal:content="item">id</p></li>
</ul>
______________________________________________ZPT na práticaZPT na prática
É possível ter mais de uma instrução numa única tag
HTML, nesse caso eles são executados na seguinte
ordem:
1 - define2 - condition3 - repeat4 - content ou replace5 - attributes6 - omit-tag
______________________________________________ZPT na prática – Chamadas de ZPT na prática – Chamadas de scriptsscripts
É possível utilizar chamadas de scripts Python ao
invés das expressões de caminho(path expressions);
Para isso usa-se o termo ‘python:’
Ex.:
<div tal:content=“python:item.getId ()“>id</div>
______________________________________________
ZPT na prática – Expressões ZPT na prática – Expressões stringstring
Expressões string permitem unir com facilidade
expressões de caminho com texto. Todo o texto
depois do termo string: é procurado por expressões de
caminho. Cada expressão deve ser precedida do sinal
de dólar ($).
Ex.:
"string:Somente texto. Sem path expressions. "
"string:Seu nome é ${user/getUserName}!"
______________________________________________ZPT na prática – MacrosZPT na prática – Macros
As page templates tem a capacidade de reutilização da ‘aparência’ e elementos em várias páginas;
Para isso utilizamos as Macros. Elas definem uma
seção da página que pode ser reutilizada por outras;
Uma macro pode ser uma página inteira, ou somente uma parte como cabeçalho ou rodapé;
Macros são definidos por atributos chamados de
METAL(Macro Expansion Tag Attribute Language)
______________________________________________ZPT na prática – MacrosZPT na prática – MacrosDefinindo uma macro:
<p metal:define-macro="copyright">
Copyright 2001, <em>Foo, Bar, and Associates</em> Inc.
</p>
Utilizando a Macro
<b metal:use-macro="container/master_page/macros/copyright">
Aqui fica a macro!
</b>
Resultado
<p> Copyright 2001, <em>Foo, Bar, and Associates</em> Inc.</p>
Aplicação com Aplicação com ArchetypesArchetypes
Framework para desenvolvimento ágil✔ Dá suporte aos tipos do Plone✔ Gera automaticamente✔ Formulários✔ Visões
ArchGenXML✔ Geração automática de códigos
Archetypes✔ Baseado em modelos
______________________________________________
______________________________________________ReferênciasReferênciaswww.plone.orgwww.zope.orgLista zope-ptwww.python.org
Meu contatoMeu contato
Muito Obrigado!!Muito Obrigado!!