Aplicações web com Python e
Google App Engine

Rodrigo Amaral
Olá!
rodrigoamaral
rodrigoamaral.net
http://pug-se.github.io
Aplicações web são legais
■ Multiplataforma
■ Acessadas de qualquer lugar
■ Fácil distribuição
■ Atualização instantânea
■ Correção de bugs controlada
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
Platform as a Service (PaaS)
■ Delegar tarefas de administração
■ Permitir escalabilidade
■ Reduzir os custos iniciais
■ Prover serivços auxiliares
Google App Engine

Executar aplicações web na
infraestrutura do Google
Python
■ Tipagem dinâmica
■ Uso geral
■ Multiparadigma
■ Sintaxe clara e legível
■ Introspecção poderosa
■ Rica biblioteca padrão
Python cabe no seu cérebro
JAVA
class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello, World!");
}
}

PYTHON
print "Hello, World!"
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]
Python cabe no seu cérebro (3)

SORTEIO SIMPLES
import random
sorteio = 'Pedro Maria Paulo Joana Renato Sofia'.split()
print random.choice(sorteio)
Características do Google
App Engine
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
Armazenamento de dados
■ Datastore
● banco de dados não-relacional
● entidades, tipos, propriedades
● schemaless

■ Google Cloud SQL
● banco de dados relacional

■ Google Cloud Storage
Autenticação e autorização
■ Google Accounts
■ Users API
Serviços
■ URL Fetch
■ Mail
■ XMPP
■ Memcache
■ Manipulação de imagens
■ Fila de tarefas
Ambiente de execução de
aplicações Python
Python App Engine SDK
■ Servidor de aplicação que simula o
ambiente App Engine
●

dev_appserver.py

■ Utilitário para upload
●

appcfg.py

■ Interface gráfica (Windows e Mac)
■ Python 2.7
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
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
Exemplo
Entendendo o código de uma aplicação
simples
relogio.py
import webapp2
import datetime
class PaginaPrincipal(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-type'] = 'text/plain'
self.response.write(datetime.datetime.now())
aplicacao = webapp2.WSGIApplication([
('/', PaginaPrincipal)
], debug=True)
app.yaml
application: relogio
version: 1
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /.*
script: relogio.aplicacao
Servidor de aplicação local
dev_appserver.py
Linha de comando
# dev_appserver.py <diretorio_da_aplicacao>

INFO
2013-12-09 19:58:56,850 api_server.py:138] Starting
API server at: http://localhost:50958
INFO
2013-12-09 19:58:56,863 dispatcher.py:171] Starting
module "default" running at: http://localhost:8080
INFO
2013-12-09 19:58:56,867 admin_server.py:117] Starting
admin server at: http://localhost:8000
Resultado no browser
Upload
appcfg.py

# appcfg.py update <diretorio_da_aplicacao>
Para saber mais
Google Developers
https://developers.google.com/appengine/

Programming Google App Engine
Livro - Editora O’Reilly

Stack Overflow
http://stackoverflow.com/questions/tagged/google-app-engine
Obrigado!

Aplicações Web com Python e Google App Engine

  • 1.
    Aplicações web comPython e Google App Engine Rodrigo Amaral
  • 2.
  • 3.
  • 4.
    Aplicações web sãolegais ■ Multiplataforma ■ Acessadas de qualquer lugar ■ Fácil distribuição ■ Atualização instantânea ■ Correção de bugs controlada
  • 5.
    Mas as coisaspodem 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 aService (PaaS) ■ Delegar tarefas de administração ■ Permitir escalabilidade ■ Reduzir os custos iniciais ■ Prover serivços auxiliares
  • 7.
    Google App Engine Executaraplicações web na infraestrutura do Google
  • 8.
    Python ■ Tipagem dinâmica ■Uso geral ■ Multiparadigma ■ Sintaxe clara e legível ■ Introspecção poderosa ■ Rica biblioteca padrão
  • 9.
    Python cabe noseu cérebro JAVA class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } } PYTHON print "Hello, World!"
  • 10.
    Python cabe noseu 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]
  • 11.
    Python cabe noseu cérebro (3) SORTEIO SIMPLES import random sorteio = 'Pedro Maria Paulo Joana Renato Sofia'.split() print random.choice(sorteio)
  • 12.
  • 13.
    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
  • 14.
    Armazenamento de dados ■Datastore ● banco de dados não-relacional ● entidades, tipos, propriedades ● schemaless ■ Google Cloud SQL ● banco de dados relacional ■ Google Cloud Storage
  • 15.
    Autenticação e autorização ■Google Accounts ■ Users API
  • 16.
    Serviços ■ URL Fetch ■Mail ■ XMPP ■ Memcache ■ Manipulação de imagens ■ Fila de tarefas
  • 17.
    Ambiente de execuçãode aplicações Python
  • 18.
    Python App EngineSDK ■ Servidor de aplicação que simula o ambiente App Engine ● dev_appserver.py ■ Utilitário para upload ● appcfg.py ■ Interface gráfica (Windows e Mac) ■ Python 2.7
  • 19.
    Web Server GatewayInterface (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
  • 20.
    Estrutura da aplicação app.yaml Identificação Módulosda 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
  • 21.
    Exemplo Entendendo o códigode uma aplicação simples
  • 22.
    relogio.py import webapp2 import datetime classPaginaPrincipal(webapp2.RequestHandler): def get(self): self.response.headers['Content-type'] = 'text/plain' self.response.write(datetime.datetime.now()) aplicacao = webapp2.WSGIApplication([ ('/', PaginaPrincipal) ], debug=True)
  • 23.
    app.yaml application: relogio version: 1 runtime:python27 api_version: 1 threadsafe: true handlers: - url: /.* script: relogio.aplicacao
  • 24.
    Servidor de aplicaçãolocal dev_appserver.py Linha de comando # dev_appserver.py <diretorio_da_aplicacao> INFO 2013-12-09 19:58:56,850 api_server.py:138] Starting API server at: http://localhost:50958 INFO 2013-12-09 19:58:56,863 dispatcher.py:171] Starting module "default" running at: http://localhost:8080 INFO 2013-12-09 19:58:56,867 admin_server.py:117] Starting admin server at: http://localhost:8000
  • 25.
  • 26.
    Upload appcfg.py # appcfg.py update<diretorio_da_aplicacao>
  • 27.
    Para saber mais GoogleDevelopers https://developers.google.com/appengine/ Programming Google App Engine Livro - Editora O’Reilly Stack Overflow http://stackoverflow.com/questions/tagged/google-app-engine
  • 28.