Desenvolvendo Aplicativos na Secretaria de Assuntos Legislativos do Ministério da Justiça
Desenvolvendo aplicativos web com o google app engine
-
Upload
pugpe -
Category
Technology
-
view
4.076 -
download
2
description
Transcript of Desenvolvendo aplicativos web com o google app engine
![Page 1: Desenvolvendo aplicativos web com o google app engine](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/1.jpg)
Desenvolvendo aplicativos Web com o Google App Engine
por Flávio Juvenal
![Page 2: Desenvolvendo aplicativos web com o google app engine](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/2.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/3.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/4.jpg)
Quem Somos?
![Page 5: Desenvolvendo aplicativos web com o google app engine](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/5.jpg)
Quem Somos?
![Page 6: Desenvolvendo aplicativos web com o google app engine](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/6.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/7.jpg)
Arquitetura Cloud
![Page 8: Desenvolvendo aplicativos web com o google app engine](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/8.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/9.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/10.jpg)
O que é o Google App Engine?
Trabalha na equipe do Google App Engine!
![Page 11: Desenvolvendo aplicativos web com o google app engine](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/11.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/12.jpg)
Na práticaVamos fazer um website similar ao delicious
delicious = Favoritos + Tags
![Page 13: Desenvolvendo aplicativos web com o google app engine](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/13.jpg)
Na práticaVamos fazer um website similar ao delicious
![Page 14: Desenvolvendo aplicativos web com o google app engine](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/14.jpg)
Na práticaVamos fazer um website similar ao delicious
![Page 15: Desenvolvendo aplicativos web com o google app engine](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/15.jpg)
Na práticaNo ar!
http://tagyoururl.appspot.com
![Page 16: Desenvolvendo aplicativos web com o google app engine](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/16.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/17.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/18.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/19.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/20.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/21.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/22.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/23.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/24.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/25.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/26.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/27.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/28.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/29.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/30.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/31.jpg)
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](https://reader036.fdocuments.net/reader036/viewer/2022062514/558585acd8b42ae41d8b4d8f/html5/thumbnails/32.jpg)
Dúvidas?
www.socialcats.com.br
@flaviojuvenal