Este documento apresenta uma oficina sobre desenvolvimento de aplicações web com Python e Google App Engine. Ele discute as vantagens e desvantagens de aplicações web, introduz o conceito de Platform as a Service (PaaS), e fornece uma visão geral das características e funcionalidades do Google App Engine, incluindo sandbox, armazenamento de dados, autenticação, serviços, e suporte a linguagem Python.
4. Aplicações web são legais
■ Multiplataforma
■ Acessadas de qualquer lugar
■ Fácil distribuição
■ Atualização instantânea
■ Correção de bugs controlada
5. Mas as coisas podem ficar
complicadas
■ Múltiplos acessos simultâneos
■ Administração de servidores
■ Precisa de alta disponibilidade
■ Custos de hospedagem
■ Programação precisa ser ágil
6. Platform as a Service (PaaS)
■ Delegar tarefas de administração
■ Permitir escalabilidade
■ Reduzir os custos iniciais
■ Prover serviços auxiliares
9. Sandbox
■ Ambiente protegido
■ Facilita distribuição da demanda
■ Não escreve no sistema de arquivos
■ Somente HTTP(S) nas portas padrão
■ Não dispara subprocessos
■ Não enxerga outras aplicações
10. Armazenamento de dados
■ Datastore
● banco de dados não-relacional
● entidades, tipos, propriedades
● schemaless
■ Google Cloud SQL
● banco de dados relacional
■ Google Cloud Storage
16. Python cabe no seu cérebro
JAVA
class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello, World!");
}
}
PYTHON
print "Hello, World!"
17. Python cabe no seu cérebro (2)
QUADRADO DOS NÚMEROS PARES EM UM VETOR
vetor = [1, 2, 3, 4, 5, 6, 7]
quadrado_pares = [n ** 2 for n in vetor if n % 2 == 0]
print(quadrado_pares)
# mostra [4, 16, 36]
18. Python cabe no seu cérebro (3)
SORTEIO SIMPLES
import random
sorteio = 'Pedro Maria Paulo Joana Renato Sofia'.split()
print random.choice(sorteio)
19. Módulos
⬝ Facilita a organização dos
programas
⬝ Todo arquivo .py é um módulo
⬝ Um módulo faz referência a outro
com o comando import
20. Importando módulos
>>> import sys
>>> print(sys.version)
2.7.4 (default, Sep 26 2013, 03:20:56)
[GCC 4.7.3]
>>> from math import pi
>>> pi
3.141592653589793
24. Dicionários
{ }
⬝ Parecidos com listas
⬝ Conjunto de chaves e valores
⬝ Cada elemento é uma tupla de chave e
valor
⬝ Estrutura conhecida como mapping,
hash, array associativo etc.
26. Classes
⬝ Definidas com a palavra-chave class
⬝ class Pessoa:
⬝ O primeiro argumento de todo método
é self
⬝ def meu_metodo(self, x):
⬝ Atributos são referenciados com self
⬝ self.atributo = 42
27. Chega de papo!
Vamos construir juntos uma pequena
aplicação web com Python e App Engine
32. Web Server Gateway Interface
(WSGI)
■ Especifica a comunicação entre
servidores web e aplicações
■ Se o framework é compatível,
funciona com o App Engine
■ Django, Flask, Pyramid, Bottle etc.
■ webapp2
33. main.py
Módulo principal da nossa aplicação
de exemplo.
É nele que vamos implementar as classes que
tratam nossas requisições.
34. Estrutura da aplicação
app.yaml
Identificação
Módulos da
aplicação
Versão
requisição
Cliente
Resolução de URLs
Permissões
Frameworks
e bibliotecas
resposta
APIs de
serviços
script.py
Templates
Aplicação WSGI
Datastore
35. webapp2
WSGIApplication
Responsável por rotear as requisições para as
classes que vão tratá-las, de acordo com a URL
Request Handlers
Classes que processam as requisições e constroem
as respostas
37. Integrando com Google Accounts
Users API
from google.appengine.api import users
users.get_current_user()
users.create_login_url(<url_retorno>)
users.create_logout_url(<url_retorno>)
38. Manipulando dados de forms
⬝ Implementar método post()
⬝ Obter dados do request
⬝ self.request.get(<nome>)
41. Arquivos estáticos
⬝ Declarar no app.yaml
handlers
- url: /css
static_dir: css
⬝ Handlers são resolvidos na ordem
⬝ URLs com .* devem ficar por último
42. Deploy da aplicação
⬝ Registrar aplicação no GAE
⬝ Ajustar configuração no app.yaml
⬝ Upload
⬝ appcfg.py update <pasta>