Segundo o site web2py Brasil: "web2py é um framework para desenvolvimento Web escrito em Python, software livre e gratuito, que tem como um de seus principais objetivos proporcionar agilidade no desenvolvimento de aplicações web seguras, baseadas em bancos de dados. O framework segue o modelo MVC (Model-View-Controller), que permite melhor organização do código. Ele também é autocontido, ou seja, tudo o que você precisa para desenvolver alguma aplicação está nele, basta baixar e descompactar para começar - nada de configurações!"
Foi desenvolvido por Massimo Di Pierro para ser uma ferramenta de ensino para programação web. Ele evoluiu muito desde sua criação, foi eleito tecnologia do ano em 2012 pelo infoworld.com e desde então tem sido utilizado em muitos projetos.
Futuramente vou fazer uma postagem mais detalhada sobre web2py e outros frameworks de desenvolvimento. Por ora, vou recomendar:
Site oficial com a documentação:
Se você tem dificuldades com inglês, um tutorial básico todo em português:
http://web2pybrasil.appspot.com/init/plugin_wiki/page/curso-web2py-000
Vídeo aula com Bruno Rocha
http://www.youtube.com/watch?v=6h73Tkco4pY
Eu fiz o curso EAD de web2py com o Bruno Rocha, recomendo que quem tiver interesse em se aprofundar que faça o mesmo. Agora vamos ao básico do básico para iniciar o nosso projeto.
MVC no web2py
Model – Aqui nesta pasta, ficarão os arquivos que farão a comunicação com o banco de dados. O web2py suporta vários bancos de dados, contando inclusive com os drivers. Possui um objeto chamando DAL que já possui muitos recursos prontos como criação de campos nas tabelas, geração de páginas com CRUD completo para tabelas, segurança contra sql injection, etc, etc, etc. Ao longo do desenvolvimento serão apresentadas algumas dessas funcionalidades.
Ps: por uma questão de arquitetura, a DAL trabalha bem com bancos relacionais. Esta é uma discussão muito longa, mas deixo minha opinião: quem for utilizar bancos NoSQL, não utilizem a DAL e façam a camada de persistência "na unha".
Ps 2: toda vez que uma página é carregada ou um refresh é feito, todos os arquivos da pasta model serão executados em ordem alfabética, portanto, muito cuidado com o que é colocado nestes arquivos para não deixar variáveis expostas e também para não deixar o seu código pesado.
Controller – Aqui vai toda a lógica da aplicação. É onde o fluxo da aplicação é controlado, faz a comunicação entre os dados e a view e vice versa. Todo o algoritmo que você precisar escrever aqui será em linguagem python.
View – Aqui ficarão os arquivos html que serão visualizados pelo usuário quando o site for acessado. Quem já programou em php vai perceber que é muito parecido. Quando for necessário incluir um código python dentro do código html basta incluir o marcador chave dupla {{código python aqui dentro}} que o web2py se encarrega de ler e executar e devolver tudo em html para o navegador mostrar corretamente.
Se você veio do java e está acostumado a criar classes e objetos, estes devem ser escritos em linguagem python e salvos na pasta modules, assim como frameworks ou ferramentas que precisem ser instanciados dentro do controller.
Plugins e Layout
Dentro do próprio site do web2py existe uma sessão onde é possível baixar plugins com várias funcionalidades prontas que podem ser "instaladas" dentro da sua aplicação. Se você assim como eu é um péssimo front-end, existe vários templates prontos para serem instalados. Basta baixar o arquivo e através da interface admin do web2py, fazer o upload e a instalação. Segue o link: http://www.web2py.com/layouts
Já o layout funciona da seguinte forma: você cria uma página com a aparência desejada e inclui o marcador {{include}} onde deseja que seja incluído algum conteúdo. Depois é só criar outra página html e incluir o seguinte marcador: {{extend 'seu_layout.html'}} e o conteúdo desta página será inserido e renderizado junto com a página de layout. Explicando dessa forma pode ficar um pouco confuso mas na prática é tudo muito simples.
Bom está foi apenas uma introdução para explicar alguns conceitos, no próximo post começo explicando o código.