associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

WebSqlObject

Receita: Web e SQLObject

Exemplo de armazenamento de dados em Banco de Dados a partir de formulários Web.

Considerações Iniciais

Comecei a usar a linguagem Python, há aproximadamente um mês, influenciada pelo seu maior divulgador no Rio Grande do Norte, na minha opinião – João Paulo Fernandes Farias – vocês já devem ter visto esse nome associado às linguagens: Python, C++, dentre outras.

Hoje, fiz meu primeiro programa recepcionando dados via Web com posterior armazenamento em um banco de dados. Confesso que, se não fosse João Paulo me tirando as dúvidas, teria tido bastante trabalho. Por este motivo, decidi compartilhar com os iniciantes em Python, como eu, a minha humilde experiência.

Ferramentas utilizadas (no Windows)

Tradutor: Python 2.3

Container Web: Apache HTTP Server 2.0.53

Plugin do Apache para Python: Mod_Python 3.1.3

Banco de dados: MySQL Server 4.1

Framework de mapeamento objeto-relacional: SQLObject 0.6.1

Driver de conexão python-MySQL: MySQLdb

Exposição do Exemplo

O exemplo em questão objetiva realizar um cadastramento muitíssimo simples em um banco de dados. Para a identificação dos dados será utilizado um formulário simples, contendo os campos: Nome, Endereço, Bairro e Telefone. Tal exemplo foi implementado em quatro etapas:

Primeira Etapa

Construção, utilizando MySQL, de uma tabela nomeada Cliente, contendo os campos: id, Nome, Endereço, Bairro e Telefone. A referida tabela foi inserida no banco cadastro.

Segunda Etapa

Implementação do módulo, nomeado cliente.py, que faz a comunicação com o banco de dados, conforme mostrado abaixo:

from sqlobject import *

cn = connectionForURI('mysql://usuario:senha@localhost/banco')

class cliente(SQLObject):
    _connection = cn
    Nome = StringCol(length=100)
    Endereco = StringCol (length=200)
    Bairro = StringCol (length=50)
    Telefone = StringCol(length=15)

Terceira Etapa

Implementação do arquivo, nomeado clienteWeb.py, que captura os dados informados via Web e os insere no banco de dados. Observe a importação do arquivo cliente, reportado na etapa anterior. As duas primeiras linhas inserem o diretório do arquivo atual, file, no caminho de busca de módulos do Python. Isto é necessário, pois o mod_python não o faz automaticamente.

import os, sys
sys.path.append(os.path.dirname(__file__))

from cliente import *

def Inicializa(req, nome, end, bairro, tel):
        cliente(Nome = nome, Endereco = end, Bairro = bairro, Telefone = tel)
        return "Cadastrado"

Quarta Etapa

Escrita do arquivo em HTML, cliente.html, para implementação do formulário em HTML. Vale dizer que este é o arquivo que será chamado no seu browser, através do endereço: http://localhost/python/cliente.html, caso você tenha armazenado seus quatro arquivos no diretório python. Em adição, o caminho real para a localização dos seus arquivos será: C:\Apache Group\Apache2\htdocs\python.

<html>
<head>
<title>Cadastro de Dados</title>
</head>
<body>

<form action="clienteWeb.py/Inicializa">

Informe o Nome do usuário: <input type="text" name="nome" size="20"><br>
Informe o Endereço do usuário: <input type="text" name="end" size="20"><br>
Informe o Bairro do usuário: <input type="text" name="bairro" size="10"><br>
Informe o Telefone do usuário: <input type="text" name="tel" size="15"><br>

<input type="submit" value="Enviar"><br>
</form>

</body>
</html>

Observação: Sempre que houver alteração relativa a classes referentes ao mapeamento objeto-relacional, deve-se reiniciar o Apache, pois após a inicialização e a primeira chamada de um script, importando o módulo que as contém, o SQLObject irá registrar tais classes. Portanto, uma mudança nestas não será visível ao SQLObject, já que o Apache criará apenas um ambiente Python para responder às várias requisições.

Pronto! Seguindo esses passos, você será capaz de implementar, em 5 minutos, um Cadastro de usuário usando mapeamento objeto-relacional em apenas algumas linhas de código....

Volta para CookBook.


Idelmárcia Dantas de Oliveira

Colaborador: João Paulo Fernandes Farias