Programando para
Web com Python
Sematec 2014
Palestrantes:
Álvaro Oliveira e Guilherme Esmeraldo
Roteiro
Bancos de Dados com o PeeWee
Interfaces Dinâmicas com Cheetah
Deixando tudo junto e misturado!
O que é um ORM?
“(...) é uma técnica de desenvolvimento utilizada
para reduzir a impedância da programação
orientada aos objetos utilizando bancos de dados
relacionais” (Wikipedia)
O que é um ORM?
Em outras palavras:
– É transformar isso:
●
String sql = "SELECT ... FROM persons WHERE id = 10";
●
DbCommanzd cmd = new DbCommand(connection, sql);
●
Result res = [Link]();
●
String name = res[0]["FIRST_NAME"];”
O que é um ORM?
Em outras palavras:
– Nisso:
Person p = [Link](10);
String name = [Link];
Apresentando PeeWee
Um ORM, com recursos expressivos:
– Pequeno
– Escrito em Python (2.6+ e 3.2+)
– Suporte a SQLite, MySQL e PostgreSQL
– Suporte a extensões:
●
postgres hstore/json/arrays,
●
sqlite full-text-search,
●
schema migrations,
●
E mais.
Com Python e Peewee, tudo é...
Rápido
– Definição de Modelo
– Armazenando Dados
– Recuperando Dados
– Editando e Excluindo Dados
Definição do Modelo
from peewee import * Tipos:
db = SqliteDatabase('[Link]') ●
CharField, TextField
●
DateTimeField, DateField,
class Tabela(Model): TimeField
c1 = CharField() ●
IntegerField, BigIntegerField
c2 = DateField() ●
BooleanField
c3 = BooleanField() ●
FloatField, DoubleField
●
DecimalField
class Meta: ●
PrimaryKeyField, ForeignKeyField
database = db ●
BlobField
Tabela.create_table()
# db.create_tables([Tabela])
Armazenando Dados
from datetime import date
novo = Tabela(c1 = 'valor', c2 = birthday=date(2014, 10, 16), c3=True)
[Link]()
Recuperando Dados
●
Um único registro
velho = [Link]().where(Tabela.c1 == 'valor').get()
# ou
# velho = [Link](Tabela.c1 == 'valor')
●
Mais de um...
for velho in [Link]()
print velho.c1, velho.c2, velho.c3
# ou
# velhos = [ velho for velho in [Link]() ]
Recuperando Dados
●
Outros exemplos
velhos = [ velho for velho in [Link]().where(Tabela.c3 == True) ]
...
velhos = [ velho for velho in [Link]().order_by(Tabela.c1) ]
...
velhos = [ velho for velho in [Link]().order_by([Link]()) ]
...
consulta = (Tabela
.select()
.where(Tabela.c2 > date(2014, 10, 12) & (Tabela.c2 < date(2014, 10, 18))
velhos = [x for x in consulta ]
Editando e Excluindo Dados
●
Primeiro: recupera-se o(s) registro(s)
velho = [Link]().where(Tabela.c1 == 'valor').get()
●
Segundo: excluir / editar
# excluir
velho.delete_instance()
# editar
velho.c1 = “novo valor”
[Link]()
O que é um Template Engine?
“(...) é um componente de software que é
designado a combinar um ou mais modelos com
um modelo de dados para produzir um ou mais
documentos como resultado.” (Wikipedia)
O que é um Template Engine?
●
Em outras palavras:
– É transformar isso:
#for $cliente in $clientes
print $[Link], $[Link]
O que é um Template Engine?
●
Em outras palavras:
– Nisso:
Álvaro 1234-1234
Guilherme 4321-4321
Fulano 9999-9999
Ciclano 6666-6666
Beltrano 3333-3333
...
Apresentando o Cheetah
É um Template Engine, que:
– É open source,
– Possui uma sintaxe muito simples,
– Foi escrito em python,
– Pode ser utilizado sozinho ou combinado*,
– É flexível,
– Utilizado nos maiores empresas do mundo,
– E possui uma grande comunidade dando
suporte.
Com Python e Cheetah, tudo é...
Rápido
– Como funciona
– Sintaxe do Cheetah
– Exemplos.
Como Funciona
from [Link] import Template
#1
…
namespace = {'dados': dados}
mt = Template(tmp, searchList=[namespace])
print [Link]()
#2
...
mt = Template(file='arquivo_template.tml')
[Link] = dados
print [Link]()
Sintaxe do Cheetah
## comment text
#break #continue #from #import #pass
#for $ variable in $ container ... #end for
#include filename_expression
#if...#else if...#else...#end if
#raw... #end raw
#repeat $ times ... #end repeat
#set $ variable = expression
#while $ condition ... #end while
Referência: [Link]
Deixando tudo junto e misturado!
● Mãos à Obra!
Duvidas?