Python – Zope - Plone Adolfo Bruno GCUFAL _____________________________________________ Maceió...

Preview:

Citation preview

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

adolfobruno@gmail.comwww.dmd2.com.br

Meu contatoMeu contato

Muito Obrigado!!Muito Obrigado!!

Recommended