O Web2py tem a variavel request.now que voce pode usar no lugar de datetime.datetime.now() sem precisar importar nada. Essa variavel guarda o horario que a requisicao foi executada. Eu estou fazendo uma aplicacao com uma parte rodando via cron e me deparei com uma situacao inusitada: todos os registros alterados no processo da cron tinham o mesmo horario de modificacao. Isso porque eu usei o update=request.now na definicao do campo que guarda a hora da ultima modificacao do registro.A situacao e que, no shell (cron), a requisicao ocorre apenas uma vez, no momento que ele e iniciado. Ja na web, a requisicao ocorre toda vez que uma URL e solicitada pelo browser. Como no shell a caracteristica e executar processos em background, nao existe a URL sendo solicitada. Na web, a cada clique de link ou de botao, uma nova requisicao e realizada.Entao, o request.now, na verdade, contem o horario que a requisicao iniciou.Para resolver meu problema, eu passei a usar o update=datetime.datetime.now(). Conferindo os resultados depois dessa modificacao, me deparei com o mesmo problema: todos os registros alterados pelo processo da cron com o mesmo horario de modificacao.Recorri a lista mundial do web2py e aprendi que esses valores para default e update sao avaliados apenas no momento que os models sao executados, quando associados a conteudos fixos ou variaveis.Para resolver o problema, temos que usar lambda assim: update=lambda:datetime.datetime.now(). Dessa forma, como temos a chamada de uma funcao (lambda no nosso caso), toda vez que um registro for modificado, esse conteudo do update sera reavaliado.O mesmo vale para a propriedade default.Portanto, use os parametros default e update com lambda, para que atualizem o conteudo no momento de insercao/alteracao do registro.Segue um exemplo: from datetime import datetimedb.define_table('ficha', Field('nome', 'string'), Field('quando', 'datetime', default=lambda:datetime.now()) Se voce ja precisou permitir que os usuarios do seu aplicativo inserissem conteudo para ser mostrado, provavelmente pensou na alternativa de usar alguma linguagem de marcacao que nao fosse HTML.A Wikipedia popularizou isso, e hoje temos varias por ai. Quase todas tem certa semelhanca, mas o importante e que seu usuario nao precisa estudar HTML para usar seu aplicativo.O problema em alguns ambientes e fazer seu aplicativo entender isso e converter a linguagem de marcacao em HTML para o browser mostrar.O Web2py traz o Markmin, uma linguagem de marcacao bem simples, que resolve a maioria dos seus problemas. E o melhor: e facinho de usar.Bem, nao vou ficar escrevendo muito. Veja: o Markmin no Web2py. Volta e meia precisamos depurar programas, principalmente quando o negocio do aplicativo e complexo ou quando estamos aprendendo uma tecnologia nova, pra ver como ela funciona.No Web2py voce pode depurar sua aplicacao web sem interferir no resultado das suas paginas.Se voce usar o comando print do Python, o conteudo printado sai na console do Web2py, ao inves de ser mostrado no browser.Faca um teste e veja como funciona. Com isso voce consegue entender melhor a sequencia de eventos do Web2py e depurar sua aplicacao.Fica a dica. No artigo "Quem alterou um registro" eu mostrei como o web2py agiliza e padroniza a criacao e controle de dados