quarta-feira, abril 15, 2009

13 passos simples para termos o Django no Google App Engineprot

Este sensacional tutorial é uma tradução do artigo Django on Google App Engine in 13 simple steps, escrito por Thomas Brox Røst.

Neste tutorial eu mostrarei como ter uma aplicação simples com acesso a banco de dados usando Django e rodando no Google App Engine. Assumirei que você tem alguma familiaridade com o Django.

Passo 1: Registre um nome de aplicativo e instale o kit de desenvolvimento seguindo as instruções do site.

Passo 2: Crie um diretório para o seu aplicativo - Para este tutorial meu aplicativo chama-se mashname:
tmp$ mkdir mashname
tmp$ cd mashname
Passo 3: Adicione um arquivo chamado main.py no seu novo diretório:
# main.py

import os, sys
os.environ["DJANGO_SETTINGS_MODULE"] = "mashname.settings"
sys.path.append("/home/brox/tmp/mashname")

# Google App Engine imports.
from google.appengine.ext.webapp import util

# Force Django to reload its settings.
from django.conf import settings
settings._target = None

import django.core.handlers.wsgi
import django.core.signals
import django.db
import django.dispatch.dispatcher

# Log errors.
#django.dispatch.dispatcher.connect(
#   log_exception, django.core.signals.got_request_exception)

# Unregister the rollback event handler.
django.dispatch.dispatcher.disconnect(
django.db._rollback_on_exception,
django.core.signals.got_request_exception)

def main():
# Create a Django application for WSGI.
application = django.core.handlers.wsgi.WSGIHandler()

# Run the WSGI CGI handler with that application.
util.run_wsgi_app(application)

if __name__ == "__main__":
main()
Este é basicamente o mesmo arquivo sugerido, exceto pelo caminho do Python que eu tive que configurar para poder fazer os testes localmente. Eu também tive que configurar a variável DJANGO_SETTINGS_MODULE - pode ser que este passo seja desnecessário quando o aplicativo estiver executando no App Engine. Eu tive que desabilitar o log de erros, os quais eu não consegui fazer funcionar.

Passo 4: Adicione um arquivo chamado app.yaml ao mesmo diretório com o conteúdo abaixo:
application: mashname
version: 1
runtime: python
api_version: 1

handlers:
- url: /.*
script: main.py
Assegure-se de usar o nome correto do aplicativo.

Passo 5: Do seu diretório mashname, crie um novo projeto do Django:
tmp/mashname$ django-admin.py startproject mashname

(Estou assumindo que o seu diretório do Django está configurado e funcionando como deveria.)

Passo 6: Agora você deveria poder testar seu aplicativo:
tmp/mashname$ cd ..
tmp$ dev_appserver.py mashname
INFO     2008-04-08 19:08:10,023 appcfg.py] Checking for updates to the SDK.
INFO     2008-04-08 19:08:10,384 appcfg.py] The SDK is up to date.
INFO     2008-04-08 19:08:10,404 dev_appserver_main.py] Running application mash
name on port 8080: http://localhost:8080
Aponte o seu browser para o endereço http://127.0.0.1:8080/ e você deverá ver a mensagem padrão do Django "It worked!".

Passo 7: Crie um aplicativo Django dentro do projeto:
tmp$ cd mashname
tmp/mashname$ python mashname/manage.py startapp main
Passo 8: Agora é hora de adicionarmos um modelo. Nós criaremos um aplicativo simples que loga todos os visitantes em uma base de dados e exibe seus endereços IP. Edite o arquivo ~/mashname/mashname/main/models.py para que ele se pareça com isso:
# models.py

from google.appengine.ext import db

class Visitor(db.Model):
ip = db.StringProperty()
added_on = db.DateTimeProperty(auto_now_add=True)
Não há necessidade de sincronizarmos o banco de dados uma vez que não estaremos usando os modelos do próprio Django.

Passo 9: Agora nós criaremos uma view que é responsável tanto por adicionar os dados ao modelo Visitor quanto por mostrar os visitantes anteriores. Edite o arquivo views.py (no mesmo diretório em que está o arquivo models.py) de modo que ele faça o que queremos:
# views.py

from django.http import HttpResponse

from mashname.main.models import Visitor

def main(request):
visitor = Visitor()
visitor.ip = request.META["REMOTE_ADDR"]
visitor.put()

result = ""
visitors = Visitor.all()
visitors.order("-added_on")

for visitor in visitors.fetch(limit=40):
result += visitor.ip + u" visited on " + unicode(visitor.added_on) + u""

return HttpResponse(result)

Passo 10: Finalmente, faça com que o seu arquivo urls.py aponte para a view:
# urls.py

from django.conf.urls.defaults import *

urlpatterns = patterns("",
(r"^$", "mashname.main.views.main"),
)
Passo 11: Teste o seu aplicativo (do mesmo modo que foi feito no passo 6) e tudo deveria funcionar perfeitamente. A cada vez que a página for recarregada uma nova entrada será adicionada ao modelo Visitor model e será exibido na view.

Passo 12: Faça o upload do seu aplicativo para o Google App Engine:
tmp$ appcfg.py update mashname
Na primeira vez em que o upload for feito, você terá que informar seu e-mail e sua senha do google.

Passo 13: Divirta-se! Para ver o resultado final, vá para http://adf.ly/35ZNC.

Nenhum comentário: