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: 48.226 ]

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 um servidor Zope/Plone

ZPT - Zope Pages Templates

Introdução ao Python (parte 2)

Gerenciando registros em banco de dados com Zope

Introdução ao Jython

Leitura recomendada

Aprenda Python - Guia "rápido"

Instalando um servidor Zope/Plone

Introdução ao Python (parte 1)

Introdução ao Python (parte 2)

wxPython, uma biblioteca GUI multi-plataforma (parte 1)

  
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