Oficina Python e Google App Engine

4.052 visualizações

Publicada em

Slides com o roteiro do mini-curso prático de introdução ao Google App Engine com Python

Publicada em: Tecnologia
0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
4.052
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2.802
Ações
Compartilhamentos
0
Downloads
17
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Oficina Python e Google App Engine

  1. 1. Oficina Python e Google App Engine Rodrigo Amaral Google Developers Group Aracaju Fevereiro de 2014
  2. 2. Olá! rodrigoamaral rodrigoamaral.net
  3. 3. http://pug-se.github.io
  4. 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. 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. 6. Platform as a Service (PaaS) ■ Delegar tarefas de administração ■ Permitir escalabilidade ■ Reduzir os custos iniciais ■ Prover serviços auxiliares
  7. 7. Google App Engine Executar aplicações web na infraestrutura do Google
  8. 8. Google App Engine Características da plataforma
  9. 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. 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
  11. 11. Autenticação e autorização ■ Google Accounts ■ Users API
  12. 12. Serviços ■ URL Fetch ■ Mail ■ XMPP ■ Memcache ■ Manipulação de imagens ■ Fila de tarefas
  13. 13. Python Visão geral da linguagem
  14. 14. Python ■ Tipagem dinâmica ■ Uso geral ■ Multiparadigma ■ Sintaxe clara e legível ■ Introspecção poderosa ■ Rica biblioteca padrão
  15. 15. Quem usa Python?
  16. 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. 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. 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. 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. 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
  21. 21. Listas [ ] >>> capitais = ["Aracaju", "Recife", "Natal"] >>> capitais ['Aracaju', 'Recife', 'Natal'] >>> len(capitais) 3 >>> capitais[1] 'Recife' >>> capitais.append("Salvador") >>> capitais ['Aracaju', 'Recife', 'Natal', 'Salvador'] >>> capitais.insert(2, "Fortaleza") >>> capitais ['Aracaju', 'Recife', 'Fortaleza', 'Natal', 'Salvador']
  22. 22. Listas (cont.) >>> c = capitais.pop() >>> c 'Salvador' >>> capitais ['Aracaju', 'Recife', 'Fortaleza', 'Natal'] >>> capitais[-1] 'Natal' >>> capitais[1:3] ['Recife', 'Fortaleza'] >>> capitais[:2] ['Aracaju', 'Recife'] >>> capitais[2:] ['Fortaleza', 'Natal'] >>> capitais.sort() >>> capitais ['Aracaju', 'Fortaleza', 'Natal', 'Recife']
  23. 23. Iterando >>> for capital in capitais: ... print(capital) ... Aracaju Fortaleza Natal Recife
  24. 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.
  25. 25. Acessando valores >>> agenda = {"Pedro": "2626-2626", "Maria": "2323-2323", "Paulo": "2121-2121"} >>> telefone = agenda["Maria"] >>> telefone '2323-2323'
  26. 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. 27. Chega de papo! Vamos construir juntos uma pequena aplicação web com Python e App Engine
  28. 28. Download http://developers.google.com/appengine/downloads #Google_App_Engine_SDK_for_Python
  29. 29. 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
  30. 30. Instalação Linux: descompactar e configurar $PATH Windows e Mac: executar instalador
  31. 31. app.yaml Entre outras configurações, descreve o que a aplicação deve fazer quando uma URL é acessada
  32. 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. 33. main.py Módulo principal da nossa aplicação de exemplo. É nele que vamos implementar as classes que tratam nossas requisições.
  34. 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. 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
  36. 36. webapp2.RequestHandler request - get() response - headers - write(<saida>) redirect(<url>)
  37. 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. 38. Manipulando dados de forms ⬝ Implementar método post() ⬝ Obter dados do request ⬝ self.request.get(<nome>)
  39. 39. Armazenando dados ⬝ Datastore (NDB) ⬝ google.appengine.ext.ndb ⬝ Entidades ⬝ ndb.Model ⬝ Properties ⬝ ndb.StringProperty, ndb.IntegerProperty etc...
  40. 40. Templates ⬝ Framework Jinja2 ⬝ Arquivos .html JINJA_ENVIRONMENT = jinja2.Environment( loader=jinja2.FileSystemLoader(os.path.dirname (__file__)), extensions=['jinja2.ext.autoescape'], autoescape=True )
  41. 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. 42. Deploy da aplicação ⬝ Registrar aplicação no GAE ⬝ Ajustar configuração no app.yaml ⬝ Upload ⬝ appcfg.py update <pasta>
  43. 43. Obrigado!

×