Desenvolvendo aplicativos web com o google app engine

32
Desenvolvendo aplicativos Web com o Google App Engine por Flávio Juvenal

description

Palestra realizada por Flávio Juvenal no X Encontro do Grupo de Usuários de Python de Pernambuco (10/02/2011) na Livraria Cultura com o tema Desenvolvendo Apps Web com o Google AppEngine e Python

Transcript of Desenvolvendo aplicativos web com o google app engine

Page 1: Desenvolvendo aplicativos web com o google app engine

Desenvolvendo aplicativos Web com o Google App Engine

por Flávio Juvenal

Page 2: Desenvolvendo aplicativos web com o google app engine

Roteiro• Introdução– Quem Somos?– Arquitetura Cloud

• Google App Engine– O que é?– Pilha de Soluções

• Na prática• Lições aprendidas

Page 3: Desenvolvendo aplicativos web com o google app engine

Quem Somos?

Um website e appsobre pessoas e eventos

Informações sociais e Recomendações

Page 4: Desenvolvendo aplicativos web com o google app engine

Quem Somos?

Page 5: Desenvolvendo aplicativos web com o google app engine

Quem Somos?

Page 6: Desenvolvendo aplicativos web com o google app engine

Quem Somos?

7 alunos doCentro de Informática - UFPE

Semi-finalistas do Prêmio Santander de Empreendedorismo

Finalistas Campuseiros Empreendem (categoria mobile)

Page 7: Desenvolvendo aplicativos web com o google app engine

Arquitetura Cloud

Page 8: Desenvolvendo aplicativos web com o google app engine

O que é o Google App Engine?

Platform as a ServiceAbstrai configuração de software e hardware e oferece uma plataforma de desenvolvimento pronta para o uso!Webapp + Python 2.5+ Datastore

Cloud computing com o GooglePermite que você execute seus aplicativos da web na infra-estrutura do Google.

Page 9: Desenvolvendo aplicativos web com o google app engine

Pilha de Soluções

Python 2.5A melhor linguagem de programação para você escrever facilmente o código de controle do seu aplicativo web.

WebappFramework web do Google para desenvolver a camada de apresentação (MVC). Muito fácil de usar.

DatastoreO jeito Google de armazenar dados. Tudo são chaves e valores. BD não relacional com foco em escalabilidade.

Page 10: Desenvolvendo aplicativos web com o google app engine

O que é o Google App Engine?

Trabalha na equipe do Google App Engine!

Page 11: Desenvolvendo aplicativos web com o google app engine

Na práticaComo fazer um ‘Hello World’?

class MainPage(webapp.RequestHandler): def get(self): self.response.headers['Content-Type'] = 'text/plain' self.response.out.write('Hello World!')

Page 12: Desenvolvendo aplicativos web com o google app engine

Na práticaVamos fazer um website similar ao delicious

delicious = Favoritos + Tags

Page 13: Desenvolvendo aplicativos web com o google app engine

Na práticaVamos fazer um website similar ao delicious

Page 14: Desenvolvendo aplicativos web com o google app engine

Na práticaVamos fazer um website similar ao delicious

Page 15: Desenvolvendo aplicativos web com o google app engine

Na práticaNo ar!

http://tagyoururl.appspot.com

Page 16: Desenvolvendo aplicativos web com o google app engine

Na práticaMostrando o HTML (handler do GET)

class MainPage(webapp.RequestHandler): def get(self): self.response.out.write(template.render('index.html', {}))

Page 17: Desenvolvendo aplicativos web com o google app engine

Na práticaMostrando o HTML (handler do GET)

<form class="myform" action="/" method="post"> <input type="text" name="url"/> <input type="hidden" name="item[tags][]"/> <input title="Inserir" type="submit"/></form>

Page 18: Desenvolvendo aplicativos web com o google app engine

Na práticaProcessando formulário (handler do POST)

class MainPage(webapp.RequestHandler): def post(self): url = self.request.get('url') tags = self.request.get_all('item[tags][]') control.insertBookmark(url, tags) self.redirect('/')

Page 19: Desenvolvendo aplicativos web com o google app engine

Na práticaModelando a entidade de Tag

class Tag(db.Model): name = db.StringProperty() @staticmethod def new(name): return Tag(key_name = name, name = name)

def toValueObject(self): return self.name

Page 20: Desenvolvendo aplicativos web com o google app engine

Na práticaModelando a entidade de Bookmark (Favorito)

class Bookmark(db.Model): url = db.StringProperty() tags = db.ListProperty(db.Key) date = db.DateTimeProperty(auto_now_add=True) @staticmethod def new(url, tags): return Bookmark(url = url, tags = tags) def toValueObject(self): tagsObjs = db.get(self.tags) tags = [tagObj.toValueObject() for tagObj in tagsObjs] return BookmarkValueObject(self.url, tags, self.date)

Page 21: Desenvolvendo aplicativos web com o google app engine

Na práticaCódigo de controle (inserção de tag)

def insertTagIfNotExists(name): tag = Tag.new(name) return tag.put()

Page 22: Desenvolvendo aplicativos web com o google app engine

Na práticaCódigo de controle (inserção de favorito)

def insertBookmark(url, tagsNames): tagsKeys = [] for name in tagsNames: tagsKeys.append(insertTagIfNotExists(name)) bookmark = Bookmark.new(url, tagsKeys) return bookmark.put()

Page 23: Desenvolvendo aplicativos web com o google app engine

Na práticaFiltrando urls com uma certa tag (código de controle)

def getAllBookmarks(): bookmarks = Bookmark.all().order("-date").fetch(1000) bookmarks = [bookmark.toValueObject() for bookmark in bookmarks] return bookmarks

def getBookmarksWithTag(name): tag = Tag.get_by_key_name(name) bookmarks = Bookmark.all().filter("tags", tag).order("-date").fetch(1000) bookmarks = [bookmark.toValueObject() for bookmark in bookmarks] return bookmarks

Page 24: Desenvolvendo aplicativos web com o google app engine

Na práticaFiltrando urls com uma certa tag (handler do GET)

class MainPage(webapp.RequestHandler): def get(self): filter = self.request.get('filter', None) if not filter: bookmarks = control.getAllBookmarks() else: bookmarks = control.getBookmarksWithTag(filter) values = dict( bookmarks = bookmarks, filter = filter ) self.response.out.write(template.render('index.html', values))

Page 25: Desenvolvendo aplicativos web com o google app engine

Na práticaFiltrando urls com uma certa tag (template/HTML)

{% for bookmark in bookmarks %}<p> <a href="{{bookmark.url}}“ target="_blank"> {{bookmark.url}} </a> ( tags: {% for tag in bookmark.tags %} <a href="/?filter={{tag}}">{{tag}},</a> {% endfor %} )</p>{% endfor %}

Page 26: Desenvolvendo aplicativos web com o google app engine

Na práticaAuto-complete de tags (código de controle)

def getAllTags(): tags = Tag.all().fetch(1000) tags = [tag.toValueObject() for tag in tags] return tags

Page 27: Desenvolvendo aplicativos web com o google app engine

Na práticaAuto-complete de tags (handler do GET)

tags = control.getAllTags()values = dict( bookmarks = bookmarks, tags = tags, filter = filter )

Page 28: Desenvolvendo aplicativos web com o google app engine

Na práticaAuto-complete de tags (template/HTML)

<script> $(document).ready(function(){ $("#mytags").tagit({ availableTags: [

{% for tag in tags %} '{{tag}}'

{% if not forloop.last %}, {% endif %} {% endfor %} ]

}); });</script>

Page 29: Desenvolvendo aplicativos web com o google app engine

Lições aprendidasEstudeVai usar uma nova tecnologia? Estude ela a fundo antes de começar a desenvolver pra valer! Leia os artigos e veja todas as palestras do Google I/O relacionadas ao Google App Engine.

code.google.com/intl/p/appengine/articles/

www.google.com/events/io/2011/

Page 30: Desenvolvendo aplicativos web com o google app engine

Lições aprendidasNoSQLBDs não relacionais são um pesadelo no início. Mas é tudo questão de costume!

Post

Título Texto Data

Post

Título Data

Corpo do Post

Texto

Page 31: Desenvolvendo aplicativos web com o google app engine

Lições aprendidasTop-downComece de cima para baixo. Ao contrário do que se pensa, é lá nos protótipos de tela que você melhor conseguirá definir suas entidades e relacionamentos.

Page 32: Desenvolvendo aplicativos web com o google app engine

Dúvidas?

www.socialcats.com.br

@flaviojuvenal