Postagens

Solucionando o problema com 'Column table.id not found (SQLTABLE)'

O novo PY4WEB esta aí, e como é um framework diferente do web2py, é possível ser instalado através do pip. O problema não é ser instalado pelo pip e sim os módulos que são os mesmos do web2py. Um deles é o pydal, o pydal é nada mais nada menos que a DAL do web2py, sendo o DAL uma abstração do pydal. Ao instalarmos o py4web no mesmo virtualenv que roda o web2py o pydal acaba conflitando com o DAL gerando aquele erro. Então o que fazer para resolver? Simples, crie um virtualenv separado para o web2py. Exemplo: $ virtualenv -p path_python venvW2P $ virtualenv -p path_python venvP4W Esses dois comandos criarão ambientes separados para cada frame. O que se deve fazer agora é apontar o venvW2P para o web2py ou trocar o caminho do interpretador python do arquivo web2py.py. Assim: #!/usr/bin/env python  por: #!path_to_venvW2P Pronto! Resolvido o problema. Referencias: https://groups.google.com/forum/#!searchin/web2py/Column$20auth_user.id$20not$20found$20(SQLTABLE)%7Csort:date/web2py/oriec...

Guia de estilos para Python

Bom galera, esse artigo vai ser curto, mas como muitos programadores quem começam no web2py vem de outras linguagens, eles trazem junto os vícios dessas linguagens. Não que seja errado a forma de programar mas cada uma delas estabelece um padrão para facilitar a legibilidade do código. E no python não é diferente. Python foi feito para humanos, então subentende-se que humanos podem ser experts ou não. Imagine você lendo um artigo no jornal escrito da seguinte maneira. CasaBrancaArdeEmChamas Hoje,na   CasaBranca ocorreram         inumeros atentados O presidente,DonaldTrump                 convocou a GuardaNacional Repare que o artigo desrespeita completamente a sintaxe do português e de regras de boa escrita. Imagine se cada um escrevesse código como bem entende. Como python é uma linguagem flexível para solucionar esse problema foi desenvolvido a pep8 ->  https://wiki.python.org.br/GuiaDeEstilo . A p...

Using multiple web2py templates

Okay, today we are going to talk about templates and multiple views on web2py. This tip will be valid for you who want dynamic templates in your app, where you can easily change it whenever you want, passing parameters in the appconfig or something like that. The idea is very basic, you have a repository of templates inside views where you will put your layouts inside, for example temp01, temp02 ... We will also take the opportunity to learn a little more about the web2py (W2P) template engine (TE) called yatl in the new py4web. Come on... The W2P TE allows us to inherit views and inclusions through the reserved words extend and include respectively. But if they are reserved words, aren't they python code? Exactly, extend and include and also block are not python code, so they are executed before any python code in our view. That is, the code below will never work. {{if condition:}} {{extend 'temp01.html'}} {{else:}} {{extend 'temp02.html}} Not even that. {{from gluon.c...

Usando multiplos templates web2py

Muito bem, hoje vamos falar sobre templates e múltiplas visões no web2py. Essa dica irá valer para você que quer templates dinâmicos em seu app, onde você possa alterar facilmente quando quiser, passando um parâmetros no appconfig ou coisa do tipo. A ideia é bem básica, você tem um repositório de templates dentro de views onde você colocará seus layouts dentro, por exemplo temp01, temp02... Vamos aproveitar também para aprender mais um pouco sobre a template engine (TE) do web2py (W2P) chamada de yatl no novo py4web. Vamos lá... O TE do W2P nos permite fazer heranças de visões e inclusões através das palavras reservadas extend e include respectivamente.  Mas se elas são palavras reservadas não são código python? Exatamente, extend e include e também o block não são código python, por isso elas são executadas antes de qualquer código python na nossa view. Ou seja, o código abaixo nunca irá funcionar. {{if condicao:}} {{extend 'temp01.html'}} {{else:}} {{extend 'temp02.html}}...

Como separar ambientes de teste e produção no web2py

Neste artigo falaremos sobre como é fácil separar ambientes no web2py. Para todo trabalho profissional é necessário diferenciar o ambiente de desenvolvimento do de testes e do ambiente de produção. Isso faz com que erros grotescos como corromper os dados, derrubar uma aplicação no meio do seu pico entre outras que custaram seu emprego sejam evitadas. O Web2py não vem por padrão com esta configuração, mas nos deixa disponível um arquivo chamado appconfig.ini dentro da pasta private. Neste arquivo por padrão temos a URI de conexão com banco de dados, email do master do site, padrão de formulários entre outros. Podemos chamar este arquivo de configuração importando o módulo abaixo from  gluon.contrib.appconfig  import  AppConfig myconf = AppConfig( reload = True ) #reload=True recarrega esse arquivo a cada request E acessar uma configuração com in_maintance = myconf.get( 'app.maintance' ) Veja como é esse arquivo por padrão ; App configuration ...

Formulários customizados e Recaptcha

Imagem
Hoje vamos falar sobre captcha e formulários customizados, por algum motivo o web2py não disponibiliza o widget do captcha no form custom. Então vamos mostrar uma solução simples e que lhe permitirá criar seus formulários mais bonitos. Em resumo! Um captcha é um controle de imagem usado para evitar que robos driblem o formulário e consigam enviar dados no formulário. O web2py usa o recaptcha na versão 2 do google, infelizmente se você quiser usar outro recaptcha terá que usar ele diretamente na view. Assunto para outro post. http://web2py.com/books/default/chapter/31/09/access-control#-CAPTCHA-e-reCAPTCHA from gluon.tools import Recaptcha2 auth . settings . captcha = Recaptcha2 ( request , 'PUBLIC_KEY' , 'PRIVATE_KEY' ) Ao habilitar o captcha no auth você verá ele funcionando ao invocar o form na view. user.html {{extend 'layout.html'}}      < div   class = "container-fluid" >        < div   class = "r...

Consulta com ALIAS usando DAL

A DAL é um recurso muito útil para manipulação de banco de dados pois se aproxima ao máximo da sintaxe SQL que conhecemos. Em determinados casos precisamos retornar em uma consulta valores pré processados como no exemplo abaixo. select tabela.valor*tabela.quantidade from tabela where tabela.campo = 'isto'; A DAL permite que façamos isso no seu construtor select(), no momento em que devemos passar os campos que desejamos retornar na consulta. Exemplo db.define_table(     'itens'     , Field('price')     , Field('quantity') ) resultado = db().select(db.itens.ALL) Veja que omitimos os parâmetros de db(), pois ali é o onde vai nosso WHERE, o db.person.ALL é o mesmo que o '*' do SQL. Se precisarmos retornar por exemplo o valor de quantidade multiplicado pelo preço, fazendo um subtotal, precisaríamos do seguinte subtotal = db.itens.price*db.itens.quantity fields = db.itens.ALL # ALL é uma lista com o nome dos campo...