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.215 ]

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


Criando um formulário de pesquisa



Vamos criar agora um formulário de pesquisa a base de dados criada utilizando ZPT (Zope Pages Templates) e o engine do Plone.

Acesse o ZMI e clique em Page Templates:


Ao clicar em add, teremos uma tela onde temos informações sobre o novo arquivo:


O campo File contém um espaço onde podemos importar um arquivo simples em HTML ou XML para servir como base para criarmos os nossos ZPT´s. Clique em Add and Edit.

Você vai ver o seguinte conteúdo:


Vamos alterar o texto do Page Template para o seguinte:

<html>
  <head>
    <title tal:content="template/title">The title</title>
  </head>
  <body>
    <FORM action="." method=get>
    <P>Digite o Nome da Pessoa que você quer saber o ramal.</P>
    <TABLE>  <TBODY>
    <TR>
    <TH>Nome</TH>
    <TD><INPUT name=Usuario width="30"></TD>
    </TR>
    <TR>
    <TH></TH>
    <TD><INPUT type=submit value="Pesquisar Ramal" name=template:method></TD>
    </TR>
    </TBODY></TABLE></FORM>
  </body>
</html>

Salve o Template e clique em Test. Assim poderá visualizar o que você fez. Veja a saída desse código:


Como visto, este código não contém muita nada de especial, somente html e uma parte do ZPT, que é a seguinte:

<title tal:content="template/title">The title</title>

E essa parte faz o trabalho de pegar na propriedade do template o title e exibir o seu valor no lugar onde está o The title.

Porém como visto acima, a página não está dentro do layout do Plone (skin). Para que a page template fique dentro do skin basta modificar algumas linhas no código (as mudanças estão em negrito destacado):

<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=get>
    <P>Digite o Nome da Pessoa que você quer saber o ramal.</P>
    <TABLE>  <TBODY>
    <TR>
    <TH>Nome</TH>
    <TD><INPUT name=Usuario width="30"></TD>
    </TR>
    <TR>
    <TH></TH>
    <TD><INPUT type=submit value="Pesquisar Ramal" name=template:method></TD>
    </TR>
    </TBODY></TABLE></FORM>
  </div></body>
</html>

Salve o arquivo, clique em Test e veja o resultado:


Pronto, agora estamos dentro do layout do Plone.

Agora vamos criar uma Z SQL Method para a busca das informações. Veja:


Clique em Add e vamos configurar:


Clique em ADD. Agora temos um formulário para consultar e criamos uma query do SQL. Agora vamos criar um formulário para visualizar os dados de nossa consulta. Agora adicione um Z Search Interface:


Ao clicar teremos uma janela com as configurações do Objeto:


Iremos selecionar a nossa Z SQL Method que criamos, a zsql_select, colocaremos o nome page template de template, pois esse foi o nome que definimos no form de pesquisa. O campo Search Input Id deverá ser o mesmo do seu Campo no formulário de pesquisa e o de seu campo Arguments do seu zsql_select. Ao clicar em ADD você terá alguns:


Como você pode perceber, temos o template que criamos e um outro objeto, o Usuario. Ao abrir o arquivo podemos ver que ele se trata de um form de pesquisa, semelhante ao formulario_pesquisa que criamos anteriormente. Veja:


Porém, este é um formulário que não está "lapidado" conforme nossas necessidades. Podemos então ignorá-lo ou simplesmente deletá-lo.

Agora precisamos customizar o template, para que ele mostre os resultados usando o skin do Plone. Veja o código:

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

  <body><div metal:fill-slot="main" tal:define="results  here/zsql_select;
                    start request/start|python:0;
                    batch python:modules['ZTUtils'].Batch(results,
                                                          size=20,
                                                          start=start);
                    previous python:batch.previous;
                    next python:batch.next">

  <p>
    <a tal:condition="previous"
       tal:attributes="href string:${request/URL0}?start:int=${previous/first}"
       href="previous_url">previous <span tal:replace="previous/length">20</span>
results</a>
    <a tal:condition="next"
       tal:attributes="href string:${request/URL0}?start:int=${next/first}"
       href="next_url">next <span tal:replace="next/length">20</span> results</a>
  </p>

  <table border>
        <tr>
          <th>Cod</th>
          <th>Usuario</th>
          <th>Unidade</th>
          <th>Ramal</th>
          <th>Radio</th>
          <th>Celular</th>
          <th>Email</th>
        </tr>
      
  <div tal:repeat="result batch" >
  
         <tr>
          <td><span tal:replace="result/cod">cod goes here</span></td>
          <td><span tal:replace="result/usuario">usuario goes here</span></td>
          <td><span tal:replace="result/unidade">unidade goes here</span></td>
          <td><span tal:replace="result/ramal">ramal goes here</span></td>
          <td><span tal:replace="result/radio">radio goes here</span></td>
          <td><span tal:replace="result/celular">celular goes here</span></td>
          <td><span tal:replace="result/email">email goes here</span></td>
        </tr>

  </div>

      </table>
  <p>
    <a tal:condition="previous"
       tal:attributes="href string:${request/URL0}?start:int=${previous/first}"
       href="previous_url">previous <span tal:replace="previous/length">20</span>
results</a>
    <a tal:condition="next"
       tal:attributes="href string:${request/URL0}?start:int=${next/first}"
       href="next_url">next <span tal:replace="next/length">20</span> results</a>
  </p>

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

Neste código nós implementamos a skin do Plone e as nossas queries vão aparecer dentro do Plone. Com este arquivo, finalizamos a criação de um formulário de pesquisa de dados.

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

Gerenciando registros em banco de dados com Zope

Introdução ao Jython

Utilizando as bibliotecas do Java usando o Jython

Introdução ao Python (parte 2)

ZPT - Zope Pages Templates

Leitura recomendada

Utilizando o Python como calculadora

Customizando o layout do plone

Instalando um servidor Zope/Plone

Python, o curso (parte 1)

Aprenda Python - Guia "rápido"

  
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