Criando formulários no Zope/Plone utilizando o banco de dados MySQL

Este artigo tem por objetivo ensinar como realizar algumas operações como pesquisa e inclusão de dados em um banco de dados MySQL. Utilizaremos a ZPT (Zope Pages Templates) para criação dos formulários.

[ Hits: 49.025 ]

Por: Fabio Rizzo Matos em 21/12/2004 | Blog: http://www.vindula.com.br


Criando um formulário de inclusão



Vamos criar um formulário que inclua dados dentro de um banco de dados. Para tal, adicione um novo page template.

Acesse o ZMI e clique em Page Templates:


E coloque os dados:


Vamos adicionar o seguinte código nele:

<html metal:use-macro="here/main_template/macros/master">
  <head>
    <title tal:content="template/title">The title</title>
  </head>
  <body> <div metal:fill-slot="main">
    
<FORM action="." method=post>
<h1>Coloque as informações do Usuário a ser cadastrado</h1><br>
<TABLE>
<TBODY>
<TR>
<TH>Nome</TH>
<TD><INPUT name=Usuario width="50" value=""></TD>
</TR>
<TR>
<TH>Unidade</TH>
<TD><INPUT name=Unidade width="50" value=""></TD>
</TR>
<TR>
<TH>Ramal</TH>
<TD><INPUT name=Ramal width="30" value=""></TD>
</TR>
<TR>
<TH>Radio</TH>
<TD><INPUT name=Radio width="30" value=""></TD>
</TR>
<TR>
<TH>Celular</TH>
<TD><INPUT name=Celular width="30" value=""></TD>
</TR>
<TR>
<TH>Email</TH>
<TD><INPUT name=Email width="50" value=""></TD>
</TR>
<TR>
<TH></TH>
<TD><INPUT type=submit value="inserir" name="py_inclui:method"></TD>
</TR>
</TBODY>
</TABLE>
</FORM>

  
  </div></body>
</html>

Depois de Salvar, clique em Test e visualize page template.


Depois de criado o formulário, é necessário que nós criarmos um Z SQL Method para incluir os dados na base.

Acesse o ZMI e Crie um Z SQL Method:


Com os dados:


Clique em Add.

Agora que criamos a query SQL, vamos criar o script Python, que será o responsável pela inclusão dos dados no banco.

Acesse o ZMI e adicione um Script (Python):


Coloque o nome de py_inclui:


Clique em Add and Edit.

Você terá acesso a um novo script:


Vamos modificar esse conteúdo por outro. Veja:

# Pega as variáveis do Ambiente
################################################

request = container.REQUEST
RESPONSE = request.RESPONSE

################################################
# Recebe os valores da Pagina
################################################

usuario = request.get('Usuario')
unidade = request.get('Unidade')
ramal = request.get('Ramal')
radio = request.get('Radio')
celular = request.get('Celular')
email = request.get('Email')

################################################
# Insere as informações no banco
################################################

context.zsql_insert(Usuario=usuario,Unidade=unidade,Ramal=ramal,
Radio=radio,Celular=celular,Email=email)

return "OK"

A lista do parâmetros é: Usuario, Unidade, Ramal, Radio, Celular, Email.


Para testar o script, clique em test:


Coloque os valores nas variáveis e clique em Run Script. Se não retornar nenhum erro e a tela mostrar OK, o script esta funcionando. Então vamos testar o nosso formulário. Acesse o formulario_inclusao e clique em test:


Digite as informações e clique em inserir.

OK

Você deverá ver uma mensagem como esta acima, informando que a inclusão foi feita com sucesso. Use o formulario_pesquisa e veja os dados que você incluiu estão disponíveis.

Porém, o nosso OK esta totalmente fora do skin do Plone.

Vamos criar uma página para mostrar que a inclusão foi feita com sucesso. Adicione um novo page template:


Com os seguintes dados:


Clique em Add and Edit. Coloque o seguinte código:

<html metal:use-macro="here/main_template/macros/master">

  <head>
    <title tal:content="template/title">The title</title>
  </head>
  <body>
  <div metal:fill-slot="main">

<h3><span tal:replace="options/mensagem | default"></span></h3>

   </div>

  </body>
</html>

Vamos analisar esse código. O que temos de novidade aqui é o seguinte código:

<h3><span tal:replace="options/mensagem | default"></span></h3>

Definimos esta área para que o nosso script, possa retornar um valor para ele. Vamos modificar o script py_insere:

# Pega as variáveis do Ambiente
################################################

request = container.REQUEST
RESPONSE = request.RESPONSE

################################################
# Recebe os valores da Pagina
################################################

usuario = request.get('Usuario')
unidade = request.get('Unidade')
ramal = request.get('Ramal')
radio = request.get('Radio')
celular = request.get('Celular')
email = request.get('Email')

################################################
# Insere as informações no banco
################################################

context.zsql_insert(Usuario=usuario,Unidade=unidade,Ramal=ramal,
Radio=radio,Celular=celular,Email=email)

#################################################
# Retorna para o template as informações
#################################################

mensagem = "Usuário Cadastrado com sucesso!"
return context.resposta(mensagem=mensagem)

Como podemos visualizar, a parte que está em negrito é a parte modificada do código. O código return context.resposta(mensagem=mensagem) diz ao Zope para retornar a página resposta e no campo mensagem colocar o valor da variável mensagem. Ao testarmos novamente o nosso formulario_inclusao não teremos mais o OK e sim a seguinte tela:

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Criando a conexão com o MySQL
   3. Criando um formulário de pesquisa
   4. Criando um formulário de inclusão
   5. Conclusão
Outros artigos deste autor

Instalando o MySQL no Zope/Plone e criando uma pequena aplicação

ZPT - Zope Pages Templates

Introdução ao Python (parte 1)

Introdução ao Jython

Gerenciando registros em banco de dados com Zope

Leitura recomendada

Gerenciando registros em banco de dados com Zope

CMS Plone 4.1.6 com invólucro Virtualenv + Buildout + Mount Point + BLOB Storage + Unicode UTF-8

Instalação básica do Plone 3 com Buildout no Linux

FreeBSD + Zope/Plone, uma idéia frustrante?

Utilizando o Python como calculadora

  
Comentários
[1] Comentário enviado por jfaguimaraes em 26/10/2008 - 17:43h

Fábio,

Muito obrigado por colocar este exemplo. Foi muito útil para mim.

Aproveito para reparar que tive uma dificuldade, porque no meu caso a linha da tabela era muito grande e então eu utilizei o <pre> para colocar numa linha só. Só que o efeito colateral foi que apareceram diversas linhas em branco antes da tabela. Como não conheço muito html sofri um pouco para ver que se colocase <tr tal:repeat="result batch"> em vez de <div tal:repeat="result batch" > o problema estaria resolvido.

Ainda estou apanhando de um erro assim:

Error Type
TypeError
Error Value
cannot concatenate 'str' and 'ImplicitAcquirerWrapper' objects

Quando clico no next da tabela. Se souber como resolve, agradeço.

Fernando.

[2] Comentário enviado por eferro em 22/09/2011 - 12:58h

Bom artigo Fábio.
Eu tenho um site no objectis.net então não apito no lado do servidor. Será que sqlite pode ser a solução?


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts