My favorites | Português | Sign in

Uso da estrutura do webapp

O padrão CGI é simples, mas seria complicado escrever manualmente todo o código utilizado por ele. As estruturas de aplicativo da web cuidam desses detalhes para você. Assim, você pode concentrar seus esforços de desenvolvimento nos recursos do seu aplicativo. O Google App Engine suporta qualquer estrutura programada em Python puro que se comunique com CGI (e qualquer outra estrutura compatível com WSGI usando um adaptador CGI), incluindo Django, CherryPy, Pylons e web.py. Você pode colocar a estrutura escolhida em um pacote com o código do seu aplicativo, colocando uma cópia do código dentro do diretório do aplicativo.

O Google App Engine inclui uma estrutura simples e própria de aplicativo da web, denominada webapp. A estrutura do webapp já está instalada no ambiente do Google App Engine e no SDK. Você não precisa colocá-la em um pacote para que o código do seu aplicativo possa usá-la. Usaremos o webapp no restante deste tutorial.

Hello, webapp!

Um aplicativo webapp contém três partes:

  • uma ou mais classes RequestHandler que processam solicitações e criam respostas
  • uma instância de WSGIApplication que redireciona as solicitações recebidas para os manipuladores, com base no URL
  • uma rotina principal que executa o WSGIApplication usando um adaptador de CGI

Vamos reescrever nossa saudação amigável como um aplicativo webapp. Edite helloworld/helloworld.py e substitua o conteúdo pelo seguinte:

from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

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

application = webapp.WSGIApplication(
                                     [('/', MainPage)],
                                     debug=True)

def main():
  run_wsgi_app(application)

if __name__ == "__main__":
  main()

Recarregue http://localhost:8080/ no navegador para ver a nova versão em ação. (Reinicie o seu servidor da web se você o interrompeu, executando o comando descrito em "Hello, World!".)

O que o webapp faz

O módulo webapp está no pacote google.appengine.ext. Esse módulo é fornecido no SDK e também no ambiente de execução de produção.

Esse código define um manipulador de solicitações, MainPage, mapeado para o URL raiz (/). Quando o webapp recebe uma solicitação HTTP GET para o URL /, ele gera uma instância da classe MainPage e chama o método get da instância. Dentro do método, há informações sobre a solicitação que podem ser acessadas por meio do self.request. Normalmente, o método define as propriedades do self.response para preparar a resposta e é finalizado em seguida. webapp envia uma resposta com base no estado final da instância de MainPage.

O aplicativo em si é representado por uma instância de webapp.WSGIApplication. O parâmetro debug=true passado ao seu construtor instrui o webapp a imprimir rastreamentos em pilha para a saída do navegador caso um manipulador encontre um erro ou cause uma exceção desconhecida. Você pode remover essa opção da versão final do seu aplicativo.

A função run_wsgi_app() assume uma instância de WSGIApplication (ou outro objeto de aplicativo compatível com WSGI) e o executa no ambiente CGI do Google App Engine. run_wsgi_app() é semelhante ao adaptador WSGI-para-CGI fornecido pelo módulo wsgiref na biblioteca padrão do Python, mas inclui alguns recursos adicionais. Por exemplo, ele pode detectar automaticamente se o aplicativo está sendo executado no servidor de desenvolvimento ou no Google App Engine e exibir erros no navegador caso esteja sendo executado no servidor de desenvolvimento.

Usaremos mais alguns recursos do webapp posteriormente neste tutorial. Para obter mais informações sobre o webapp, consulte a Referência do webapp.

Próximo passo...

As estruturas facilitam o desenvolvimento de aplicativos da web, com mais rapidez e menor propensão a erros. O webapp é apenas uma das muitas estruturas disponíveis para Python. Agora que estamos usando uma estrutura, vamos adicionar alguns recursos.

Vá para Como usar o serviço de Usuários.