Mostrando postagens com marcador iniciante. Mostrar todas as postagens
Mostrando postagens com marcador iniciante. Mostrar todas as postagens

27 de abril de 2011

Controle total sobre seus models

Toda aplicação web2py que usa banco de dados tem um diretório chamado models.

Esse diretório é particularmente importante devido a alguns fatores:
  1. Os arquivos do diretório models são executados em ordem alfabética;
  2. É ali que ficam as definições das tabelas dos bancos de dados de sua aplicação;
  3. Os objetos definidos por esses arquivos ficam disponíveis com escopo global na aplicação. Ou seja, podem ser acessados pelos controladores e pelas views.
Talvez a caracterísitica que mais exija atenção, é a primeira: execução em ordem alfabética.

Algumas pessoas iniciantes têm certa dificuldade com isso e acham meio estranho esse comportamento. Eu também achava, até concluir que esse é o jeito mais intuitivo para tudo funcionar.

Entretanto, para evitar alguns inconvenientes que esse funcionamento pode trazer, precisamos adotar uma nomenclatura clara e o mais simples possível para organizar nossos scripts dentro do diretório models.

Eu adoto a seguinte estrutura básica:
  1. models/0_db.py
  2. models/1_menu.py
  3. models/5_models.py
  4. models/5_validators.py
Em quê isso ajuda?

Eu renomeio o db.py gerado automaticamente pelo web2py para 0_db.py. Assim, garanto que todas as definições básicas são executadas antes de qualquer coisa. O objeto DAL, que fornece toda a funcionalidade de acesso a dados, é criado nesse script.

Também renomeio o menu.py para 1_menu.py fazendo com que as definições de menu sejam executadas depois da instanciação do objeto DAL.

Com esses nomes modificados, garanto que o esqueleto gerado automaticamente pelo web2py vai ser executado antes das partes que eu vou desenvolver depois.

A partir daí, escrevo o models/5_models.py com todas as definições de tabelas. Vale ressaltar que eu deixo dentro desse arquivo apenas os db.define_table().

Para escrever os validadores, eu crio o models/5_validators.py. Mas por que separado? Primeiro, porque o web2py recomenda que você não coloque os validadores dentro do db.define_table(). Segundo, porque nesse ponto eu tenho certeza de que todas as tabelas já foram definidas. Assim, garanto que qualquer referência cruzada entre elas funcione sem precisar alterar a ordem de criação delas. Às vezes isso desorganiza o script de criação das tabelas.

Se eu tiver muitas tabelas, nada me impede de dividir a definição delas em vários scripts, por módulos, por exemplo: 5_models_estoque.py, 5_models_financeiro.py, etc. E, da mesma forma, os validadores.

Aqui, sua criatividade é quem manda, mas lembre-se de alguns princípios:
Explícito é melhor do que implícito.
Simples é melhor do que complexo.
Linear é melhor do que encadeado.
A legibilidade conta.
Quando encontrar a ambiguidade, recuse a tentação de adivinhar.

8 de junho de 2010

Rodando o web2py no seu computador

Se você nunca viu o web2py na vida, continue lendo esse post. Aqui vamos iniciar com o web2py de uma forma bem iniciante mesmo.

O primeiro passo é fazer download do web2py em web2py.com

A praticidade começa logo de cara. Para executá-lo, basta baixar o pacote para seu sistema operacional e começar a usá-lo. Simples e direto, como tudo deveria ser.

Vale notar as versões de Python com as quais o web2py trabalha. Na época da escrita desse post, junho/2010, a versão corrente do web2py era a 1.79.1. Confira na página de download se sua versão de Python é compatível e faça essa adequação, caso necessário.

A seção 3.1 do livro oficial de web2py, escrito pelo autor do framework, trata de como iniciar o web2py, com instruções para as plataformas Windows, Linux e Mac OS X. Por isso não vou entrar em detalhes aqui. Vou apenas dizer que ao executar o web2py, você está colocando no ar um mini-servidor web, que serve para o desenvolvimento de suas aplicações.

O Django e o Ruby on Rails têm a mesma funcionalidade e filosofia: iniciar o quanto antes, sem complicações. Não precisa configurar Apache, como no PHP.

O servidor web2py (como vamos chamá-lo aqui) roda por default em http://localhost:8000.
Na verdade, além de ser um mini-servidor web, ele é uma interface administrativa para suas aplicações. É diferente do Django porque aqui no web2py, você pode criar aplicações, escrever programas, views ou modelos de banco de dados sem usar um editor externo. É uma forma de editar aplicações pelo browser. O Django fornece um admin muito poderoso, mas apenas para as tabelas do banco de dados, não para sua aplicação propriamente dita.

Antes de iniciar o servidor web2py, você precisa informar uma password de administrador para controlar as aplicações locais. Faça isso e o servidor será iniciado, mostrando a página da aplicação default, que é chamada de "Welcome".

A aplicação Welcome é muito simples, mas já podemos ver algumas boas funcionalidades do web2py em ação. Se você a viu em português, abra a pasta web2py/applications/welcome/languages e renomeie os arquivos pt.py, pt_br.py e pt_pt.py, dê refresh na página e ela aparecerá em inglês para você.

Sugiro que você abra um desses arquivos de idiomas e também o arquivo web2py/applications/welcome/views/default/index.html

O helper T() que está no index.html é o que faz com que o texto traduzido seja buscado. Faça alguns testes modificando algumas traduções, salvando o arquivo de idiomas e dando refresh na página. A tradução é feita na hora, sem adição de módulos externos. Já está lá embutida no web2py. É tão simples, que a aplicação que serve de apresentação do framework já tem isso nela funcionando.

Lembra que eu falei que o web2py permite que você edite sua aplicação diretamente pelo browser? Então vamos modificar os arquivos de tradução usando-o, seguindo os seguintes passos:
  1. Na página principal da app Welcome, em inglês, clique no link "click here for the administrative interface".
  2. Digite a senha de administrador que você informou ao iniciar o servidor web2py e clique no botão login.
  3. Escolha o link "EDIT" que está abaixo do nome da aplicação welcome.
  4. Role a página até aparecer a seção "Languages".
  5. Clique na opção "edit" ao lado do arquivo de idioma que você quer modificar.
  6. Traduza o que quiser e clique no botão "update", ao final da página.
Essa é apenas uma introdução rápida ao web2py. Brinque um pouco com ele, dê uma lida no manual online que está disponível na homepage do web2py.

E vamos trocando ideias.