Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Aplicações Web com Python e Google App Engine

Aplicações Web com Python e Google App Engine

Visão geral dos recursos do Google App Engine e seu ambiente de execução de aplicações em Python

Rodrigo Amaral

December 11, 2013
Tweet

More Decks by Rodrigo Amaral

Other Decks in Programming

Transcript

  1. Aplicações web com Python e
    Google App Engine
    Rodrigo Amaral

    View full-size slide

  2. Olá!
    rodrigoamaral
    rodrigoamaral.net

    View full-size slide

  3. http://pug-se.github.io

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  6. Platform as a Service (PaaS)
    ■ Delegar tarefas de administração
    ■ Permitir escalabilidade
    ■ Reduzir os custos iniciais
    ■ Prover serivços auxiliares

    View full-size slide

  7. Google App Engine
    Executar aplicações web na
    infraestrutura do Google

    View full-size slide

  8. Python
    ■ Tipagem dinâmica
    ■ Uso geral
    ■ Multiparadigma
    ■ Sintaxe clara e legível
    ■ Introspecção poderosa
    ■ Rica biblioteca padrão

    View full-size slide

  9. Python cabe no seu cérebro
    class HelloWorld
    {
    public static void main(String[] args)
    {
    System.out.println("Hello, World!");
    }
    }
    print "Hello, World!"
    JAVA
    PYTHON

    View full-size slide

  10. Python cabe no seu cérebro (2)
    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]
    QUADRADO DOS NÚMEROS PARES EM UM VETOR

    View full-size slide

  11. Python cabe no seu cérebro (3)
    import random
    sorteio = 'Pedro Maria Paulo Joana Renato Sofia'.split()
    print random.choice(sorteio)
    SORTEIO SIMPLES

    View full-size slide

  12. Características do Google
    App Engine

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  15. Autenticação e autorização
    ■ Google Accounts
    ■ Users API

    View full-size slide

  16. Serviços
    ■ URL Fetch
    ■ Mail
    ■ XMPP
    ■ Memcache
    ■ Manipulação de imagens
    ■ Fila de tarefas

    View full-size slide

  17. Ambiente de execução de
    aplicações Python

    View full-size slide

  18. 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

    View full-size slide

  19. 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

    View full-size slide

  20. Estrutura da aplicação
    Datastore
    Templates
    Cliente
    app.yaml
    Identificação
    Versão
    Resolução de URLs
    Permissões
    script.py
    Aplicação WSGI
    Módulos da
    aplicação
    Frameworks
    e bibliotecas
    APIs de
    serviços
    requisição
    resposta

    View full-size slide

  21. Exemplo
    Entendendo o código de uma aplicação
    simples

    View full-size slide

  22. 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)

    View full-size slide

  23. app.yaml
    application: relogio
    version: 1
    runtime: python27
    api_version: 1
    threadsafe: true
    handlers:
    - url: /.*
    script: relogio.aplicacao

    View full-size slide

  24. Servidor de aplicação local
    dev_appserver.py
    # dev_appserver.py
    Linha de comando
    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

    View full-size slide

  25. Resultado no browser

    View full-size slide

  26. Upload
    appcfg.py
    # appcfg.py update

    View full-size slide

  27. 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

    View full-size slide