Toda aplicacao web2py que usa banco de dados tem um diretorio chamado models.Esse diretorio e particularmente importante devido a alguns fatores:Os arquivos do diretorio models sao executados em ordem alfabetica;E ali que ficam as definicoes das tabelas dos bancos de dados de sua aplicacao; Os objetos definidos por esses arquivos ficam disponiveis com escopo global na aplicacao. Ou seja, podem ser acessados pelos controladores e pelas views.Talvez a caracterisitica que mais exija atencao, e a primeira: execucao em ordem alfabetica.Algumas pessoas iniciantes tem certa dificuldade com isso e acham meio estranho esse comportamento. Eu tambem achava, ate concluir que esse e 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 possivel para organizar nossos scripts dentro do diretorio models.Eu adoto a seguinte estrutura basica:models/0_db.pymodels/1_menu.pymodels/5_models.pymodels/5_validators.pyEm que isso ajuda?Eu renomeio o db.py gerado automaticamente pelo web2py para 0_db.py. Assim, garanto que todas as definicoes basicas sao executadas antes de qualquer coisa. O objeto DAL, que fornece toda a funcionalidade de acesso a dados, e criado nesse script.Tambem renomeio o menu.py para 1_menu.py fazendo com que as definicoes de menu sejam executadas depois da instanciacao 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 dai, escrevo o models/5_models.py com todas as definicoes 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 voce nao coloque os validadores dentro do db.define_table(). Segundo, porque nesse ponto eu tenho certeza de que todas as tabelas ja foram definidas. Assim, garanto que qualquer referencia cruzada entre elas funcione sem precisar alterar a ordem de criacao delas. As vezes isso desorganiza o script de criacao das tabelas.Se eu tiver muitas tabelas, nada me impede de dividir a definicao delas em varios scripts, por modulos, por exemplo: 5_models_estoque.py, 5_models_financeiro.py, etc. E, da mesma forma, os validadores.Aqui, sua criatividade e quem manda, mas lembre-se de alguns principios:Explicito e melhor do que implicito. Simples e melhor do que complexo.Linear e melhor do que encadeado.A legibilidade conta. Quando encontrar a ambiguidade, recuse a tentacao de adivinhar. Com essas ja somam tres ferias escolares de filha no meu curriculum demae... Na primeira delas lembro que levei um susto ao me deparar com arealidade de que, no periodo de 20dias, Natalia nao teria atividades escolarespara ocupar boa parte do dia... Acostumada desde os seus tres meses de idade aocalendario ininterrupto da creche-bercario; o qual mantinha uma rotina deatividades de lazer, pedagogicas, ludicas e sociais para o consolo de pais quenao tinham escolha, a nao ser o trabalho diario... E nesse confronto derealidade (trabalho x ferias escolares) as articulacoes com curtas viagens,passeios com a vovo, programas com os amiguinhos vao sendo costurados como umacolcha de retalhos para que ao final do periodo os dias vividos se transformemem doces e coloridas lembrancas... Mas Natalia nao e mais a menininha de 3 anosdas primeiras ferias, apesar