Escolar Documentos
Profissional Documentos
Cultura Documentos
This is a Leanpub book. Leanpub empowers authors and publishers with the Lean Publishing
process. Lean Publishing is the act of publishing an in-progress ebook using lightweight tools and
many iterations to get reader feedback, pivot until you have the right book and build traction once
you do.
2014 - 2015 Renzo Nuccitelli
Dedico esse livro minha me Amanda e minha noiva Priscila, que sempre me apoiam, por mais
malucas que sejam minhas idias.
Ao meu grande amigo Reginaldo Filho, vulgo Beraba, que me apresentou o Google App Engine.
Aos meus amigos Dnis Costa e Giovane Liberato, que criaram e me permitiram usar o sensacional
ttulo desse livro.
Ao Luciano Ramalho, meu tutor e parceiro no site Python Pro.
A todos alunos, que me motivam a continuar ensinando.
A todos os mestres que passaram pela minha vida e me salvaram pela educao.
Contedo
Prefcio . . . . . . . . . . . . . . . . .
Relao de Confiana . . . . . . . .
Por que Google App Engine (GAE)?
Por que Python? . . . . . . . . . . .
Pblico . . . . . . . . . . . . . . . .
Conhecimento Prvio . . . . . . . .
Cdigo Fonte e Vdeo Aulas . . . .
Organizao do Contedo . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
i
i
i
ii
ii
ii
iii
iii
Ambiente de Desenvolvimento
Introduo . . . . . . . . . . .
Interpretador Python . . . . .
Terminal de Comando . . . .
Pycharm . . . . . . . . . . . .
Publicao (Deploy) . . . . . .
Windows e Mac . . . . . . . .
Resumo . . . . . . . . . . . .
Questes . . . . . . . . . . . .
Respostas . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
1
2
4
5
8
10
11
12
Webapp2 . . . . . . . . . .
Introduo . . . . . . . .
O que Webapp2? . . . .
Arquivo app.yaml . . . .
Roteamento via Webapp2
Request . . . . . . . . .
Response . . . . . . . . .
Redirect . . . . . . . . .
Resumo . . . . . . . . .
Questes . . . . . . . . .
Respostas . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
13
13
13
14
17
19
20
20
22
23
24
Tekton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
25
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
CONTEDO
Setup inicial . . . . . . . . . . . . . . . . . .
Virtualenv . . . . . . . . . . . . . . . . . . .
Script convention.py . . . . . . . . . . . . .
Roteamento via Tekton . . . . . . . . . . . .
Recebimento de Parmetros . . . . . . . . .
Configuraes Globais e Internacionalizao
Injeo de Dependncia . . . . . . . . . . . .
Redirecionamento . . . . . . . . . . . . . . .
Resumo . . . . . . . . . . . . . . . . . . . .
Questes . . . . . . . . . . . . . . . . . . . .
Respostas . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
25
26
32
34
36
36
38
39
41
42
43
Prefcio
A educao a arma mais poderosa que voc pode usar para mudar o mundo.
- Nelson Mandela
Relao de Confiana
Durante minha vida passei por algumas situaes e precisei de ajuda. E por isso fui salvo pela
educao. Se voc no pode pagar, envie um email para renzo.n@gmail.com para poder adquirir o
livro gratuitamente de forma legal.
Em contrapartida peo o seguinte, na base da confiana:
1.
2.
3.
4.
Prefcio
ii
Groupon. A promessa foi cumprida e o GAE aguentou todos picos de transferncia de arquivos. At
hoje o sistema utilizado e j trafegou mais de 2 milhes de fotos.
Mas nem tudo foi fcil. Apesar da simplicidade, a plataforma exigiu de mim uma mudana de
paradigma. E como toda mudana, levou certo tempo para me acostumar.
Mas apesar das diferenas, as vantagens se mostraram maiores que os problemas. E isso que
mostrarei. Abordarei no s conceitos e exemplos simples, mas apresentarei solues para problemas
reais e recorrentes no mundo das aplicaes web.
Pblico
Este livro foi escrito para quem deseja aprender a fazer uma aplicao completa para internet. Mais
do que isso, ele ideal para quem quer transformar uma ideia em um produto web rapidamente,
sem ter que aprender a complexa arte de escalar servidores.
A documentao do GAE excelente, objetiva e centralizada. Contudo, muitas vezes apresenta
ferramentas superficialmente. Sendo assim, esse livro uma excelente fonte para voc ir alm do
bsico, desenvolvendo solues profissionais e robustas.
Conhecimento Prvio
recomendvel o conhecimento bsico sobre protocolo HTTP, HTML, Javascript e CSS. Se voc no
possui algum deles, pesquise cada assunto somente quando necessrio para entender os exemplos.
http://hibernate.org/
Prefcio
iii
Organizao do Contedo
O contedo est organizado nos seguintes captulos:
1.
2.
3.
4.
5.
6.
7.
8.
9.
Ambiente de Desenvolvimento
Se quiser derrubar uma rvore em metade do tempo, passe o dobro do tempo amolando o machado.
- Provrbio chins de autor desconhecido
Introduo
O ambiente de desenvolvimento o conjunto de ferramentas que o desenvolvedor utiliza para
construir software em seu computador. Ambientes complexos, com erros ou que demoram a executar
suas tarefas comprometem profundamente a produtividade. Por isso, como no caso do machado da
parbola, mantenha-o sempre afiado.
Nesse captulo sero instalados os itens necessrios para o desenvolvimento: interpretador Python,
Kit de Desenvolvimento de software (SDK, do ingls Software Development Kit). Alm desses,
tambm ser utilizado um Ambiente Integrado de Desenvolvimento (IDE, do ingls Integrated
Development Enviroment), o Pycharm.
Interpretador Python
Atualmente existem duas principais verses da linguagem: 2.7 e 3.4. Sempre bom utilizar a ltima,
por conta das melhorias. Mas muitos frameworks ainda no foram portados para a nova verso. O
App Engine um caso e por isso a plataforma s aceita a verso 2.7 da linguagem Python.
No Linux (Ubuntu verso 12.04) el j est disponvel por padro. Para instalar em outros sistemas,
visite a pgina de downloads e escolha a verso adequada ao seu Sistema Operacional.
Para verificar aquela que est instalada em seu sistema, abra um terminal de comando e digite
python. A verso disponvel impressa como primeira linha aps a execuo, conforme exemplo a
seguir:
http://www.python.org/getit/
Ambiente de Desenvolvimento
Caso aparea uma mensagem informando que o comando no existe, deve ser instalado o interpretador atravs do link j mencionado. Se a instalao j foi feita, verifique se o endereo de instalao
foi adicionado ao path.
Terminal de Comando
Para ser possvel emular e desenvolver a aplicao em um computador, necessrio instalar o Kit
de Desenvolvimento Padro (SDK, do ingls Standard Development Kit). Ele prov as ferramentas
necessrias para inicializao do servidor localmente, interao com banco de dados, entre outras.
Assim como o interpretador, o endereo de instalao tambm deve ser adicionado ao path. Para
fazer isso no Linux, acesse a sua pasta home e utilize o atalho Crtl+h para visualizar os arquivos
ocultos. Dentre esses arquivos se encontram dois de interesse: o .bashrc e o .profile. Edite esses
arquivos adicionando em seus finais as seguintes linhas:
Adio de varivel de Ambiente no Linux
A seguir se encontra um exemplo para um SDK que foi instalado em diretrio bin localizado na
pasta home:
Arquivo .bashrc editado para incluir SDK ao path
Cabe ressaltar que a varivel GAE_SDK no obrigatria. Contudo, ela ser utilizada no captulo de
Testes Automatizados. E por ser parte da configurao, ela j foi aqui inserida.
https://developers.google.com/appengine/downloads?hl=pt-br
Ambiente de Desenvolvimento
Ol Mundo - Terminal
Dentro da pasta do Kit de Desenvolvimento existe um diretrio contendo um modelo de projeto.
Acesse-o e copie a pasta new_project_template para um endereo de sua preferncia. A figura
1.01 a seguir mostra o contedo do SDK aps extrao do arquivo zipado:
Copiada a estrutura do projeto, navegue at seu diretrio no terminal e digite o seguinte comando
dev_appserver.py . para iniciar o servidor localmente.
A figura 1.02 mostra o console no caso de execuo correta do programa. A partir desse momento o
SDK est servindo a aplicao localmente. Acesse o endereo http://localhost:8080 em seu navegador
e confira se aparece a mensagem Hello World. Em caso negativo, confira os passos anteriores.
Desligue o servidor utilizando o atalho Ctrl+C.
Ambiente de Desenvolvimento
Observe que a primeira opo depois do comando o diretrio onde se encontra o arquivo de
configurao app.yaml. Sendo assim, tambm funcionaria o comando dev_appserver.py new_project_template se executado direto do diretrio home.
Pycharm
Apesar de ser possvel utilizar a linha de comando e um editor de texto simples para desenvolver,
nesse livro ser utilizado o Ambiente de Desenvolvimento Integrado (IDE, do ingls Integrated
Development Enviroment) Pycharm. Outros tambm podem ser utilizados , como o Pydev, que
inclusive gratuito. Mas aquele foi escolhido por ser robusto e por seu conjunto de ferramentas.
Para conseguir executar o Pycharm necessrio instalar a Mquina Virtual Java (JVM, do ingls
Java Virtual Machine). Aps baixar o pacote adequado ao seu sistema tambm necessrio adicionlo ao path. As seguintes linhas devem ser adicionadas aos arquivos .bashrc e .profile, onde a varivel
JAVA_HOME deve apontar para o diretrio onde foi extrado o JDK:
Arquivo .bashrc editado para colocar JDK no path
export JAVA_HOME=/home/renzo/bin/jdk1.7.0_45
PATH=$PATH:$JAVA_HOME/bin
http://www.jetbrains.com/pycharm/download/
http://pydev.org/
http://www.oracle.com/technetwork/pt/java/javase/downloads/jdk7-downloads-1880260.html
Ambiente de Desenvolvimento
Ol Mundo - IDE
Ao iniciar a IDE, clique em Create New Project e escolha o tipo de projeto Google App Engine project.
Voc deve assinalar um identificador para o seu projeto e informar o diretrio onde se encontra o
SDK do Google App Engine. A tela de criao de projeto deve ficar semelhante figura 1.03:
Para executar o servidor local, basta clicar no cone verde play que se encontra em destaque na
figura 1.4.
Verique se no link http://localhost:8080 , utilizando seu navegador, aparece a mensagem Hello
World. Em caso negativo, confira e repita os passos anteriores.
Publicao (Deploy)
Muitos programadores iniciantes comeam a desenvolver suas aplicaes logo aps aprenderem
como inicializar o servidor localmente. Contudo, o processo de publicao do site um passo
fundamental. Somente dessa maneira os usurios podem acess-lo pela rede.
O deploy deve ser simples. Em um bom processo de desenvolvimento, deve ser possvel publicar
apenas com um clique ou comando. Mais do que isso, o site deve ser publicado de maneira
Ambiente de Desenvolvimento
frequente. Por essa razo, recomenda-se iniciar o desenvolvimento apenas aps a publicao do
site pela primeira vez, mesmo que seja apenas para imprimir uma mensagem simples. Afinal de
contas, no faz sentido desenvolver um site se no for possvel disponibiliz-lo. Como afirmaram
Jez Humble e Dave Farley em seu livro Entrega Contnua: Atualmente muitas companhias esto
fazendo mltiplos deploys em apenas um dia. Foge ao escopo desse livro implementar o processo
automatizado. Contudo, fazer o deploy manualmente, antes do desenvolvimento em si, o primeiro
passo nesse sentido.
Painel de Controle
Para publicao, necessrio a criao de uma aplicao no Painel de Controle do Google App
Engine. Isso deve ser feito no endereo http://appengine.google.com. Ser necessrio utilizar uma
Conta Google. Aps o cadastro, ser possvel visualizar o painel.
Clicando Create Application uma nova aplicao gerada. Um identificador nico e um nome
devem ser atribudos aplicao, como na figura 1.05:
Cadastrada a aplicao, o arquivo de configurao app.yaml que se encontra na raiz de seu projeto
deve ser editado. O identificador deve ser copiado na primeira linha, no item application. Um
exemplo da primeira linha do arquivo se encontra a seguir:
Primeira linha do arquivo app.yaml
application: cursospythonpro
These days, many companies are putting out multiple releases in a day. Continuous Delivery, p. xxiii
Ambiente de Desenvolvimento
Para usar o App Engine a conta Google precisa ser verificada por celular atravs de um
sms. Usurios j se queixaram dessa mensagem nunca chegar para clientes da operadora Oi.
Para evitar isso, pode ser utilizado um celular de outra operadora. Outra opo pedir para
algum j cadastrado enviar um convite, via painel de administrao, para administrao
de um projeto j existente. Nesse caso, a verificao no necessria.
~$ cd PycharmProjects/cursospythonpro/
/PycharmProjects/cursospythonpro$ appcfg.py update .
O programa pedir e-mail e senha. Devem ser inseridos os dados relativos conta que se utilizou
para criar a aplicao no painel de controle. Com esse comando o SDK ir escanear os arquivos do
projeto e envi-los ao servidor.
Finalizada a publicao, possvel acessar o site atravs do endereo http://seu_identificador.appspot.com,
conforme imagem 1.06:
Para quem usa login em dois passos, deve ser utilizado o comando appcfg.py update
. --oauth2. Ser exibida a tela de login no navegador onde possvel inserir a senha e o
cdigo de segurana.
http://www.google.com/intl/pt-PT/landing/2step/
Ambiente de Desenvolvimento
Devem ser inseridas as credenciais. Finalizado o processo, possvel acessar o site no endereo
supracitado.
Para quem usa login em dois passos, a opo Use Passwordless login via OAuth2 de
ser escolhida. Ser exibida a tela de login no navegador onde possvel inserir a senha e o
cdigo de segurana.
Windows e Mac
o SDK oferece uma Interface Visual (GUI, do ingls Graphical User Interface) que pode ser utilizada
em opo linha de comando para os Sistemas Operacionais Windows Mac OS. Clicando em em
File > Add new Application um novo projeto criado, como na figura 1.08:
http://www.google.com/intl/pt-PT/landing/2step/
Ambiente de Desenvolvimento
Criado o projeto possvel iniciar o servidor local clicando no boto Run e fazer o deploy clicando
no boto com esse nome. importante notar que a utilizao da IDE Pycharm faz com que o
desenvolvimento ocorra da mesma forma nos diferentes sistemas operacionais. Por isso ele ser
utilizado como base para os exemplos.
Outra fator interessante que ao instalar no Mac, ele informa que criar um link simblico para
a pasta do SDK. Esse link se encontra em /usr/local/google_appengine e deve ser utilizado quando
necessrio para referenciar as bibliotecas da plataforma.
Ambiente de Desenvolvimento
10
Resumo
Nesse seo foi explicado como instalar as ferramentas necessrias para executar o servidor
localmente: Interpretador Python verso 2.7 e SDK do Google App Engine. Alm disso, foi instalado
o Pycharm, IDE que facilita o desenvolvimento.
Mais do que a instalao, foi ensinado como executar o servidor localmente e como fazer a publicao
do projeto via linha de comando, IDE e tambm via GUI do SDK do Google App Engine para
Windows e Mac.
Esse conhecimento possibilitar o desenvolvimento e testes nos prximos captulos.
Ambiente de Desenvolvimento
Questes
1.
2.
3.
4.
5.
6.
7.
11
Ambiente de Desenvolvimento
12
Respostas
1. As duas principais verses atuais do interpretador Python so 2.7 e 3.4.
2. A verso de Python suportada atualmente pelo App Engine a 2.7.
3. O SDK do App Engine serve para acessar as ferramentas de desenvolvimento, como servidor
local e banco de dados.
4. A vantagem de colocar ferramentas no path do Sistema Operacional poder executar
comandos independente do diretrio em que se encontre o Terminal de Comando.
5. IDE um Ambiente Integrado de Desenvolvimento. Ele serve para fornecer ferramentas que
facilitam o desenvolvimento e faz com que o processo de desenvolvimento seja independente
de sistema operacional.
6. O arquivo de configurao de uma aplicao App Engine se chama app.yaml
7. O domnio padro para acessar aplicaes App Engine na internet appspot.com
Webapp2
Linguagem no simplesmente um dispositivo para relatar experincias, mas um framework que
as define.
- Benjamin Whorf
Introduo
A palavra framework significa um esquema, um conjunto de passos, que serve para resolver
determinado problema. Apesar do termo ser geral, ele muito utilizado em computao como
sinnimo de biblioteca. Ou seja, um conjunto de cdigos que se utilizados facilitam a construo
de um sistema.
Por conta disso importantssimo saber quais so as questes que um framework busca resolver. Se
algum pedisse para uma pessoa se vestir a carter, a pergunta bvia seria: Qual a ocasio?. Sendo
assim, seguir os passos de uma biblioteca sem saber seu objetivo anlogo a ir vestido de fraque em
uma partida de futebol.
Nesse captulo ser explicado o funcionamento do framework Webapp2 e seu objetivo.
O que Webapp2?
Webapp2 uma biblioteca de cdigo aberto utilizada na documentao oficial introdutria ao GAE.
Ela implementa o padro WSGI (Web Server Gateway Interface) e pode ser utilizada em outras
plataformas que forneam integrao com esse padro.
No ser ela a biblioteca base utilizada para construir a maior parte dos exemplos nesse livro.
Contudo, seu entendimento fundamental por duas razes:
1. O framework Tekton ir utiliz-la como base;
2. Algumas vezes necessrio fazer uso do Webapp2, utilizando objetos como Request,
Response e Handler.
A seguir constam sees explicando os diferentes componentes dessa ferramenta.
Language is not simply a reporting device for experience but a defining framework for it.
Webapp2
14
Arquivo app.yaml
No projeto criado no captulo anterior existe um arquivo de configurao chamado app.yaml
conforme listagem 2.01:
Listagem 2.01: Arquivo app.yaml
application: new-project-template
version: 1
runtime: python27
api_version: 1
threadsafe: yes
libraries:
- name: webapp2
version: "2.5.2"
handlers:
- url: /favicon\.ico
static_files: favicon.ico
upload: favicon\.ico
- url: .*
*script*: main.app
Esse arquivo contm as principais informaes sobre o projeto. Sempre que se quiser entender sua
estrutura geral, deve-se verificar o contedo desse arquivo, que ser detalhado nas prximas sees.
Cabealho Inicial
No cabealho inicial do arquivo se encontram informaes bsicas sobre o projeto, conforme
listagem 2.02:
Listagem 2.02: Cabealho
1
2
3
4
5
application: new-project-template
version: 1
runtime: python27
api_version: 1
threadsafe: yes
15
Webapp2
Na linha 1, application, consta o identificador da aplicao. Conforme foi visto na seo deploy do
captulo anterior, esse cdigo deve ser o mesmo utilizado na criao da aplicao no console do GAE.
Atravs dele o SDK identifica o projeto e consegue publicar o site corretamente na nuvem.
J na linha 2 consta a verso da aplicao. importante notar que o GAE permite a existncia de
vrias verses simultneas. A figura 2.01 mostra uma aplicao com mltiplas verses:
Nesse exemplo a verso 27 padro e, portanto, ela serve a aplicao quando acessada atravs do
endereo http://picprolabs.appspot.com. Para acessar diferentes verses, como a 16 por exemplo, seu
nmero deve ser concatenado ao incio do domnio. Uma primeira forma de fazer isso acessar
o endereo http://16-dot-picprolabs.appspot.com/. Outro endereo vlido http://16.picprolabs.
appspot.com/. Recomenda-se utilizar o primeiro, pois ele evita problemas no caso de acesso seguro
via https.
Cabe ressaltar que essa funcionalidade muito til para se testar a aplicao antes de torn-la
disponvel aos clientes. Ou seja, publica-se o site em uma verso especfica, alterando a verso no
arquivo de configurao. Suas funcionalidades so conferidas e homologadas no respectivo endereo
dedicado. Em caso de sucesso, a nova verso definida como padro, ficando disponvel a todos
usurios. Outra vantagem poder retornar verso anterior em caso de problemas. E tudo isso
feito com apenas um clique no painel de administrao.
As demais linhas definem a verso da linguagem e api. Alm disso, informam se uma instncia da
aplicao pode processar requisies em paralelo.
Bibliotecas Embutidas
O GAE fornece um conjunto de bibliotecas embutidas. Para instalao, deve ser editada a seo
libraries do arquivo de configurao, conforme listagem 2.03.
16
Webapp2
Cada item define o nome da biblioteca a ser instalada e, opcionalmente, sua respectiva verso. No
exemplo foi instalada a verso 2.5.2 da biblioteca Webapp2.
Listagem 2.03: Instalao do framework Webapp2
1
2
3
libraries:
- name: webapp2
version: "2.5.2"
1
2
3
4
5
6
7
handlers:
- url: /favicon\.ico
static_files: favicon.ico
upload: favicon\.ico
- url: .*
*script*: main.app
Nas linhas 2 a 4 definido um handler para servir o arquivo esttico favicon.ico no path
/favicon.ico. Esse endereo padro utilizado pelo navegador para colocar uma imagem respectiva
ao site na aba em que ele est aberto, conforme figura 2.02:
Webapp2
17
Mas o assunto de arquivos estticos ser melhor abordado no captulo 4, Frontend. Nesse, o foco a
execuo de cdigo Python que ocorre quando um endereo digitado no navegador.
Na linha 6, contendo a expresso url, esto sendo mapeados todos os paths atravs da expresso
regular .*. Essa expresso se traduz como: qualquer cadeia de caracteres. Cabe ressaltar que os
handlers so processados na ordem em que aparecem. Por essa razo o primeiro trata a chamada
em /favicon, enquanto o segundo ir tratar todos os demais.
Uma vez mapeado o path, deve ser informado qual ser o script que dever processar a requisio.
Isso feito na linha 7, onde configurado o arquivo main.py. Outros handlers poderiam ser
adicionados ao arquivo para processar outros endereos.
1
2
3
4
5
6
7
8
9
10
11
12
class HomeHandler(webapp2.RequestHandler):
def get(self):
self.response.write('Ol Mundo!')
18
Webapp2
O primeiro parmetro da construo uma lista de tuplas, onde o primeiro argumento a expresso
regular mapeando os paths. No exemplo, est sendo mapeada a raiz do projeto '/'. J o segundo
parmetro indica a classe, HomeHandler, que ir ser utilizada para tratar a requisio.
Com esse cdigo escrito e depois de executar o servidor, possvel obter a mensagem Ol Mundo
no navegador, conforme a figura 1.03:
Seguindo a mesma filosofia, o script main.py pode ser editado para responder Ol Wepapp2!
quando se acessa o path /outra. As mudanas se encontram no Cdigo 2.01:
Cdigo 2.01: Script main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
class HomeHandler(webapp2.RequestHandler):
def get(self):
self.response.write('Ol Mundo!')
class OutroHandler(webapp2.RequestHandler):
def get(self):
self.response.write('Ol Wepapp2!')
19
Webapp2
1. Configurar o arquivo app.yaml toda vez que se deseja criar um script Python;
2. Configurar cada Handler dentro de seu respectivo script com o Webapp2.
Request
Quando o usurio acessa um site no navegador, ele est enviando uma requisio HTTP. O Webapp2
processa essa requisio, construindo um objeto do tipo Request. atravs dessa interface que o
cdigo do servidor obtm acesso s informaes e parmetros enviados pelo usurio.
Parmetros podem ser enviados atravs do que se chama query string, que parte da url localizada
aps o sinal ?. Sendo assim, quando se faz uma chamada HTTP do tipo GET, possvel editar
os valores enviados modificando a url no navegador. Na figura 2.05 consta um exemplo onde so
passados os parmetros nome com valor Renzo e sobrenome com valor Nuccitelli. Cada parmetro
divido utilizando-se o sinal &:
importante notar que acessando a url, a mensagem apresentada no mais esttica. Ela
construda com base nos parmetros enviados. Para isso se utiliza o mtodo get do objeto Request,
fornecendo o nome do parmetro do qual se deseja extrair o valor. Os valores obtidos das requisies
sempre so do tipo string. O cdigo 2.02 apresenta o handler com os mtodos get, nas linhas 3 e 4,
em destaque:
Cdigo 2.02: Handler com extrao de parmetros
1
2
3
4
5
class ParametrosHandler(webapp2.RequestHandler):
def get(self):
nome = self.request.get('nome')
sobrenome = self.request.get('sobrenome')
self.response.write('Ol %s %s!' % (nome, sobrenome))
Cabe ressaltar que se o parmetro inspecionado no estiver presente na query string, o mtodo get
ir retornar None como valor.
Muitas outras informaes podem ser extradas do objeto, tais como cookies, cabealhos HTTP e
domnio. Mas esses outros mtodos sero vistos no decorrer do livro, sendo a obteno de parmetros
o foco nesse momento.
Webapp2
20
Response
Aps o recebimento de uma requisio, o servidor deve enviar uma resposta utilizando protocolo
HTTP. Para cumprir esse objetivo, utilizado o objeto do tipo Response. Ele prov mtodos para
auxiliar no envio de dados.
Nos exemplos anteriores seu mtodo write foi utilizado para enviar uma string como resposta s
requisies. O cdigo 2.03 contm lgica que se utiliza desse mtodo, na linha 5, em destaque:
Cdigo 2.03: Mtodo write para escrita de strings
1
2
3
4
5
class ParametrosHandler(webapp2.RequestHandler):
def get(self):
nome = self.request.get('nome')
sobrenome = self.request.get('sobrenome')
self.response.write('Ol %s %s!' % (nome, sobrenome))
De forma semelhante ao Request, o objeto Response possui mtodos para se alterar cookies e
cabealhos HTTP. Esses mtodos tambm sero vistos nos prximos captulos.
Redirect
Muitas vezes ao se acessar uma url o usurio redirecionado para outra. Isso ocorre com frequncia
aps a submisso de um formulrio. Seu objetivo evitar que a requisio para salvamento de dados
seja enviada novamente, caso o navegador tenha seu boto de atualizar pressionado.
Para executar esse redirecionamento, o objeto RequestHandler fornece o mtodo redirect. A ele
deve ser fornecido como parmetro a url completa, no caso de um servidor externo. No caso de
um endereo interno da aplicao, apenas o path precisa ser utilizado. O cdigo 2.04 contm cdigo
exemplificando os dois casos:
Cdigo 2.04: Mtodo redirect
1
2
3
4
5
6
7
8
9
10
class RedirecionaParaOutroHandler(webapp2.RequestHandler):
def get(self):
self.redirect('/outra')
class GoogleHandler(webapp2.RequestHandler):
def get(self):
self.redirect(str('http://www.google.com'))
21
Webapp2
11
12
13
14
15
16
Webapp2
22
Resumo
Nesse captulo foi apresentado um resumo do framework de cdigo aberto Webapp2. Atravs de
seus 3 principais objetos, Request, Response e RequestHandler possvel obter dados dos usurios,
enviar informaes do servidor e redirecion-los para outros endereos.
Mais do que simplesmente utilizar essa biblioteca, foi importante entender que ela serve para abstrair
o protocolo HTTP. Sendo assim, precisamos apenas conhecer seus componentes para construir um
web site. Apesar de simples, os poucos componentes vistos so suficiente para construirmos toda a
navegao de uma aplicao.
O Webapp2 no ser o framework base para a construo dos exemplos desse livro. Mas seu
conhecimento fundamental, pois com base nele que ir funcionar o framework Tekton, que ser
o assunto do prximo captulo.
Webapp2
23
Questes
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Webapp2
24
Respostas
1. O nome do arquivo de configurao do Google App Engine app.yaml.
2. O item application serve para identificar a aplicao. Ele deve conter o mesmo id definido
no momento da criao da aplicao no painel de controle disponvel em http://appengine.
google.com.
3. O item version serve para identificar qual verso da aplicao ser utilizada no momento da
publicao do site.
4. O endereo para acessar a aplicao foo em sua verso 35 deve ser http://35.foo.appspot.com.br
ou http://35-dot-foo.appspot.com.br. recomendado utilizar a segunda forma para evitar
problemas quando o acesso for feito via https.
5. A seo libraries serve para configurar as bibliotecas a serem utilizadas na aplicao. O
GAE fornece um conjunto de bibliotecas que podem ser instaladas dessa maneira.
6. A seo handlers serve para mapear os scripts Python que sero executados de acordo com
o path das requisies HTTP.
7. Para definio dos paths so utilizadas expresses regulares.
8. necessrio mapear RequestHandlers nos scripts Python porque comum a definio
de mltiplas classes em um arquivo. Sendo assim somente o mapeamento via arquivo de
configurao no suficiente para definir qual classe ser utilizada para processar uma
requisio.
9. A classe RequestHandler serve para definir o cdigo que ir processar uma requisio HTTP.
10. Os mtodos da classe RequestHandler devem ser sobrescritos para processar as chamadas
HTTP de tipo com mesmo nome. Por exemplo, uma chamada HTTP do tipo GET ser
processada no mtodo sobrescrito get, Uma chamada do tipo POST em um mtodo post e
assim or diante.
11. O objeto Request serve como interface para acesso s informaes sobre uma requisio
HTTP.
12. Os valores de parmetros enviados via query string em uma chamada HTTP do tipo GET so
obtidos utilizando-se o mtodo get do objeto Request. A ele deve ser fornecido o nome do
parmetro do qual se quer extrair o valor.
13. O objeto Response server como interface para construo de uma resposta HTTP. Ela contm
os dados a serem enviados como resposta a uma requisio.
14. O mtodo write da classe Response serve para enviar strings.
15. Para enviar uma resposta de redirecionamento deve ser utilizado o mtodo redirect do objeto
RequestHandler, fornecendo como parmetro o path desejado, no caso de redirecionamento
para a mesmo aplicao, ou a url completa em caso contrrio.
Tekton
Voc deve renunciar toda superficialidade, toda conveno, toda presuno e desiluso.
- Gustav Mahler
Introduo
Conveno em vez de Configurao (Convention over Configuration) o grande mantra desse
captulo. Ser explicado o funcionamento do framework Tekton e todas suas convenes. A ideia
principal evitar a excessiva configurao do sistema, permitindo o foco em funcionalidades.
Diferente da abordagem do captulo anterior, Webapp2, o roteamento e recebimento de parmetros
ser feito atravs de convenes. Apesar disso, o conhecimento sobre os objetos bsicos, Request,
Response e RequestHandler, ser fundamental.
Tekton ser a biblioteca base. Nela sero construdos todos os exemplos de cdigo no restante do
livro.
Setup inicial
O repositrio do Tekton consiste em um template para iniciar um novo projeto. possvel copiar esse
cdigo baixando o arquivo zipado. Aps a extrao, ele apresenta a seguinte estrutura de pastas:
tekton-master
backend
appengine
apps
build_*script*s
test
venv
26
Tekton
1.
2.
3.
4.
5.
6.
Virtualenv
Virtualenv uma biblioteca Python. Ela permite que se crie um ambiente isolado para cada projeto.
possvel ento definir qual a verso da linguagem e quais so as bibliotecas externas que sero
utilizadas.
Instrues de instalao para os sistemas Linux, Mac OS e Windows.
~/PycharmProjects/appengineepython$cd backend/venv/
~/PycharmProjects/appengineepython/backend/venv$./venv.sh
Virtualenv Windows
Para instalar o virtualenv no Windows se faz necessrio a instalao do pip, uma biblioteca python
para instalao de pacotes. Para isso deve ser baixado o script Python get_pip.py. Depois o script
deve ser executado com o interpretador Python, conforme exemplo a seguir:
https://raw.github.com/pypa/pip/master/contrib/get-pip.py
27
Tekton
C:\Users\renzovm>cd Desktop
C:\Users\renzovm\Desktop>python get_pip.py
Downloading/unpacking pip
Downloading/unpacking setuptools
Installing collected packages: pip, setuptools
Successfully installed pip setuptools
Cleaning up...
Aps a instalao o pip deve ser adicionado ao path. Para isso deve ser aberto o explorer e utilizado o
boto direito do mouse para clicar em computador. Depois deve ser acessado o menu propriedades,
Configuraes Avanadas de Sistema, e na poro Variveis do Sistema a varivel Path deve
ser editada para conter em seu final o diretrio de instalao do pip. No caso da instalao padro,
esse endereo C:\Python27\Scripts. A figura 3.01 exemplifica o processo:
O instalador atual do Python 2.7.9 para Windows j vem com pip instalado por padro.
Alm disso, no processo de instalao possvel marcar opo para adio automtica do
Python ao path, evitando todo o trabalho manual.
Com o pip instalado deve ser executado o comando pip install virtualenv para instalar o
virtualenv. Finalmente com o virtualenv instalado e o template de projeto extrado na rea de
Tekton
28
Trabalho possvel criar o ambiente isolado para o projeto atravs da linha de comando. Para
rodar o comando necessrio abrir o prompt como administrador. Para isso, clique no menu Iniciar,
digite cmd. Mantenha pressionadas as teclas Crtl + Shift e ento pressione enter:
Criao de virtualenv
C:\Users>cd renzovm
C:\Users\renzovm>cd Desktop
C:\Users\renzovm\Desktop>cd appengineepython
C:\Users\renzovm\Desktop\appengineepython>cd backend
C:\Users\renzovm\Desktop\appengineepython\backend>cd venv
C:\Users\renzovm\Desktop\appengineepython\backend\venv>venv.bat
Arquivo requirements.txt
As dependncias de bibliotecas externas do projeto se encontram em dois arquivos: requirements.txt e dev_requirements.txt, presentes no diretrio venv. No primeiro se encontram as
dependncias necessrias ao funcionamento do servidor:
Arquivo requirements.txt
tekton==4.0
gaebusiness==4.4.2
gaecookie==0.7
gaeforms==0.5
gaegraph==3.0.2
gaepermission==0.8
pytz==2014.4
Babel==1.3
python-slugify==0.0.7
29
Tekton
Arquivo dev_requirements.txt
-r requirements.txt
mock==1.0.1
mommygae==1.1
Esses arquivos podem ser editados para conter dependncias que se julguem necessrias durante o
desenvolvimento.
Links Simblicos
Em um servidor comum o processo de instalao de dependncias seria feito com os mesmos
comandos. Contudo, no temos acesso ao Sistema Operacional do GAE. Sendo assim, necessrio
informar ao sistema onde se encontram as bibliotecas, de forma que elas sejam copiadas durante o
processo de deploy. Alm das bibliotecas, tambm devem ser dispobilizados os cdigos das aplicaes
presentes no diretrios apps.
Essas tarefas so realizadas pelo script de setup. Ele cria os links simblicos apps e lib na pasta
appengine apontado para os diretrios de interesse.
Virtualenv e Pycharm
As aes realizadas at agora serviram apenas para instalar as bibliotecas no projeto. Contudo, o
Pycharm precisa utilizar o ambiente criado para poder auxiliar no desenvolvimento, oferecendo
opes de auto complete referente s bibliotecas e apps.
Para isso deve ser acessada a janela de configurao da IDE (cone chave de roda). No input de
pesquisa deve ser inserida a palavra Interpreter e escolhida a opo Python Interpreters. Deve ser
pressionado o cone + e escolhida a opo Local..., conforme figura 3.02:
30
Tekton
Feito isso, deve ser selecionado o ambiente isolado localizado dentro do projeto. No Linux o arquivo
a ser escolhido /backend/venv/bin/python. J no Windows ele se encontra em
\backends\venv\Scripts\python.exe.
Indicado o virtualenv, deve ser editada a localizao do servidor. Para isso deve ser acessado o menu
Edit Configurations conforme figura 3.03:
Uma vez nessa janela, deve ser configurado o diretrio appengine do projeto como Working
directory, j que ele contm o arquivo app.yaml. A figura 3.04 mostra a configurao final:
Aps toda essa configurao possvel executar o servidor local e verificar a pgina inicial do projeto
no navegador, conforme figura 3.05:
31
Tekton
Como ltimo passo de configurao, necessrio ento marcar pastas chave como razes de cdigo
fonte. Isso necessrio para que a IDE consiga inspecionar seus contedos a fim de auxiliar no
processo de desenvolvimento. A figura 3.06 mostra o menu a ser acessado quando se clica com
boto direito do mouse sobre cada um dos diretrios:
32
Tekton
Script convention.py
No projeto configurado o framework Tekton utiliza os objetos bsicos do Webapp2. Sendo assim,
possvel investigar o arquivo de configurao app.yaml para entender seu funcionamento:
Tekton
33
handlers:
- url: /
*script*: convention.app
secure: always
- url: /robots\.txt
static_files: static/robots.txt
upload: static/robots.txt
- url: /favicon\.ico
static_files: static/img/favicon.ico
upload: static/img/favicon.ico
- url: /static(.*)
static_files: static\1
upload: static.*
- url: /[^_].*
*script*: convention.app
secure: always
- url: /_ah/warmup
*script*: routes.warmup.app
Da configurao possvel notar que as requisies sero tratadas, com apenas algumas excees,
pelo arquivo convention.py. O contedo desse script se encontra no cdigo 3.01.
Nas linhas 2 e 3 do arquivo so adicionados os diretrios lib e apps, presentes em appengine, ao
path. Essa a razo de se ter criado os links simblicos nesse endereo, na seo de Setup Inicial.
Nas linhas 11 e 12 so definidos os parmetros de localizao e fuso horrio da aplicao. Mais
detalhes sobre isso ser visto na seo Arquivo settings.py.
Nas demais linhas definido um nico RequestHandler que trata todas requisies. importante
ressaltar que tanto chamadas POST e GET so tratadas pelo mesmo mtodo make_convention. Se
for necessrio atender outros mtodos, como o PUT, suficiente editar o arquivo copiando o mtodo
get e substituindo seu nome para tambm atender a respectiva chamada HTTP.
Tekton
34
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# Put lib on path, once Google App Engine does not allow doing it directly
sys.path.append(os.path.join(os.path.dirname(__file__), "lib"))
sys.path.append(os.path.join(os.path.dirname(__file__), "apps"))
import settings
from tekton.gae import middleware
import webapp2
from webapp2_extras import i18n
i18n.default_config['default_locale'] = settings.DEFAULT_LOCALE
i18n.default_config['default_timezone'] = settings.DEFAULT_TIMEZONE
class BaseHandler(webapp2.RequestHandler):
def get(self):
self.make_convention()
def post(self):
self.make_convention()
def make_convention(self):
middleware.execute(settings.MIDDLEWARE_LIST, self)
Tekton
35
1
2
3
4
@login_not_required
@no_csrf
def index():
return TemplateResponse()
O resultado da execuo do cdigo foi visto no final da seo de Setup, na figura 3.05, onde aparecia
a home do Tekton.
No caso do acesso ao path /usuario, a biblioteca ir procurar pelo script usuario.py e executar
sua funo index. J o acesso a /usuario/ola acarretar na execuo da funo ola do script
usuario.py. O arquivo se encontra sob o pacote routes:
routes/
home.py
usuario.py
1
2
3
4
5
6
7
8
9
10
@login_not_required
@no_csrf
def index(_resp):
_resp.write('Pgina de Usurio')
@login_not_required
@no_csrf
def ola(_resp):
_resp.write('Ol Usurio')
36
Tekton
Recebimento de Parmetros
Alm da conveno de rotas, o recebimento de parmetros tambm feito por conveno. Para
receber o valor de um parmetro chamado nome necessrio apenas declarar um argumento de
mesmo nome. Como exemplo, a funo ola foi alterada conforme cdigo 3.04:
Cdigo 3.04: funo ola com parmetro nome
1
2
Mais parmetros podem ser recebidos acrescentando-se argumentos funo, conforme cdigo 3.05:
Cdigo 3.09: funo ola com parmetros nome e sobrenome
1
2
Tekton
37
Arquvio setting.py
1
2
3
4
5
6
7
APP_URL = 'https://tekton-fullstack.appspot.com'
SENDER_EMAIL = 'renzon@gmail.com'
DEFAULT_LOCALE = 'pt_BR'
DEFAULT_TIMEZONE = 'America/Sao_Paulo'
LOCALES = ['en_US', 'pt_BR']
TEMPLATE_404_ERROR = 'base/404.html'
TEMPLATE_400_ERROR = 'base/400.html'
Aps alterar o idioma necessrio rodar o script para gerar o arquivo de tradues. O Tekton j
possui embutida biblioteca de internacionalizao, facilitando a construo de sites em mltiplas
lnguas. Maiores detalhes sero vistos em captulos posteriores. Por ora, suficiente rodar o script
build_*script*s/babel/i18n_extractor.py. Gerados os arquivos, possvel verificar a home page
traduzida:
38
Tekton
Injeo de Dependncia
O framework Tekton prov um sistema simplificado de injeo de dependncia por conveno de
nomes. Ao declarar parmetros com identificao especial, a biblioteca injeta objetos de interesse
automaticamente. o caso do parmetro _resp constante no cdigo 3.09, reproduzido abaixo por
comodidade. Atravs dele se tem acesso ao objeto Response, visto em detalhes no captulo 2:
Webapp2.
39
Tekton
1
2
Se fosse necessrio receber tambm o objeto Request como dependncia, seria suficiente acrescentar
um segundo parmetro funo, conforme cdigo cdigo 3.10:
Cdigo 3.10: funo ola com injeo de objetos Response e Request
1
2
3
4
O underscore _ na frente dos parmetros injetados apenas uma conveno. Ela foi
adotada para diferenciar os argumentos que so injetados daqueles que so extrados da
requisio HTTP. Dessa maneira possvel perceber no cdigo 3.10 que _resp e _req so
dependncias injetadas, enquanto nome e sobrenome so parmetros recebidos via protocolo
HTTP.
Da mesma forma que foram extradas as dependncias do framework Webapp2, a mesma ideia pode
ser empregada para outros objetos ou funes. A vantagem dessa tcnica tornar o cdigo testvel.
Isso ficar mais claro no captulo de Testes Automatizados.
Redirecionamento
Uma vez que o objeto RequestHandler recebido como injeo de dependncia, para fazer um
redirecionamento necessrio apenas receb-lo atravs do parmetro _handler e utilizar seu mtodo
redirect. O cdigo 3.11 mostra o mtodo redirecionar que redireciona para o path respectivo
funo ola:
Tekton
40
Cdigo 3.11: Mtodo Redirecionar com url como string, script usuario.py
1
2
3
4
5
@login_not_required
@no_csrf
def redirecionar(_handler):
url = r'/usuario/ola/Renzo/Nuccitelli'
_handler.redirect(url)
O problema dessa abordagem que o path inserido como uma string. Se por alguma razo o nome
da funo ola for alterado, o redirecionamento levar a um link quebrado. Por essa razo o Tekton
prov uma interface para calcular a url a partir de uma funo.
A cdigo 3.12 mostra o cdigo alterado, fazendo uso do mdulo router, presente no pacote tekton,
para gerar a url baseada na funo, que seu primeiro parmetro. Nessa abordagem, em caso de
refatorao da funo ola, o link do redirecionamento iria ser atualizado automaticamente para o
endereo correto.
Cdigo 3.12: Mtodo Redirecionar com url calculada por tekton.router.py
1
2
3
4
def redirecionar(_handler):
url = r'/usuario/ola/Renzo/Nuccitelli'
url = router.to_path(ola, 'Renzo', 'Nuccitelli')
_handler.redirect(url)
41
Tekton
Resumo
Nesse captulo foi abordado o framework Tekton. Foi utilizado o virtualenv para sua instalao e o
arquivo requirements.txt para resoluo de dependncias de outras bibliotecas.
Foram explicadas as vrias convenes, visando evitar excessiva configurao:
Por fim, foi visto como se utilizar o mdulo tekton.router.py para calcular paths, permitindo a
atualizao automtica de endereos no caso de refatorao de nomes de funes.
Com base nesse conhecimento sero construdos todos os exemplos constantes no restante desse
livro.
42
Tekton
Questes
1.
2.
3.
4.
5.
6.
7.
8.
Tekton
43
Respostas
1. O Virtualenv serve para se criar ambientes Python isolados para cada projeto.
2. O arquivo convention.py serve para fazer a ligao entre o Tekton e o Wepapp2. Ele
o arquivo onde se encontra o handler que delega todas requisies para funes que se
encontram sob o pacote routes, atravs de conveno.
3. necessrio incluir bibliotecas atravs de cdigo no arquivo convention.py porque diferente
de servidores tradicionais, na plataforma GAE no se tem acesso ao Sistema Operacional para
se poder instalar as bibliotecas utilizando virtualenv e pip.
4. A declarao da funo seria def salvar(nome,idade) e deveria constar no script usuario.py.
5. Parmetros recebidos via injeo de dependncia possuem a conveno de conter o prefixo _
antes de seus nomes. Parmetros recebidos via requisio HTTP so escritos sem esse prefixo.
6. Parmetros recebidos via injeo de dependncia devem sempre ser os primeiros a serem
declarados em uma funo.
7. Quando for necessrio fazer um redirecionamento deve ser declarada a dependncia _handler
para acessar a instncia de RequestHandler que est tratando a requisio. Deve ser utilizado
o mtodo redirect desse objeto para se efetuar o redirecionamento.
8. Deve ser utilizada a funo to_path do mdulo tekton.router para se calcular o path
respectivo a uma funo, que deve ser passada como parmetro.