O modelo MVC (MODEL-VIEW-CONTROLLER) é um padrão de organização de aplicações. Assim, ficarão separados os models (modelos), que são as representações de dados; as views (visualizações), que são as apresentações dos dados; e os controllers (controladores), que são as funções e interações que a aplicação irá realizar.
MODELS
Nos models são guardadas informações de bancos de dados, além de criadas e validadas suas tabelas. A partir disso, poderemos gravar e armazenar dados da aplicação e interagir com eles: resgatar, editar, deletar, etc.
Os models também são sempre os primeiros arquivos a serem lidos, em ordem alfabética, pelo web2py. Ou seja, se eu tenho um arquivo db.py e um model.py, as informações do arquivo db.py serão lidas e interpretadas antes de model.py. Portanto, se alguma informação presente em db.py depender de algo em model.py, ocorrerá um erro!
Além disso, tudo o que for definido em um model poderá ser acessado em todas as partes da aplicação.
CONTROLLERS
Nos controllers são definidas as funções da aplicação que farão com que ela funcione da forma como designada. São nos controllers que poderemos fazer com que a aplicação interaja com o banco de dados e envie informações para o usuário. No web2py, cada função sem parâmetros no controller é mapeada para uma URL, ou seja, cada função define uma diferente página da sua aplicação.
Caso você passe parâmetros para uma função, ela deixa de ser mapeada como uma página e passa a ser uma função Python comum, que poderá ser chamada no código. Isso é especialmente feito em models, pois assim a função será acessível em todas as camadas de código.
VIEWS
As views definem o que a aplicação vai exibir para o usuário e a forma como isso se dará. No web2py, views são arquivos HTML que podem receber código Python. O código Python em um view deve estar dentro dos delimitadores {{ }} para ser executado.
Views podem herdar ou incluir outras views. Isto é, você pode fazer com que uma view contenha outra, exibindo ambas em conjunto.