Mostrando postagens com marcador python. Mostrar todas as postagens
Mostrando postagens com marcador python. Mostrar todas as postagens

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.

quinta-feira, dezembro 27, 2007

Rails ou Django? E agora?

Estou desenvolvendo um site e agora estou na fase de modelagem do sistema.

Logo começarei a programar. Mas estou com uma dúvida: Django/Python ou Rails/Ruby?

Já li dezenas de posts comparando os dois frameworks e cada um tenta mostrar que o seu é o melhor.

Dependendo de quem escreve temos um resultado. Se é um fã do Rails, no fim da comparação, Rails se sai melhor. De modo semelhante, a comparação feita por um fã do Django sempre termina recomendando seu uso em detrimento do outro framework.

Acredito que as comparações são feitas da melhor maneira possível, sem a intenção de prejudicar a outra linguagem / framework analisado.

O que acontece é que quem analisa não conhece tão profundamente as outras linguagens / frameworks quanto conhece o seu. Daí, uma hora o Rails se sai melhor e na outra é o Python o vitorioso.

Seria interessante que alguém especificasse um projeto de médio ou grande porte e que os melhores de cada linguagem / framework fizesse a sua implementação. Aí sim, poderiamos ter uma comparação mais justa.

Gosto das duas linguagens (Python e Ruby), a documentação disponível para ambas é farta e muito boa, as comunidades são muito atenciosas e procuram de fato ajudar quem está iniciando ou tropeçando em algum problema.

Estou pensando até em desenvolver o meu projeto com os dois frameworks e ir comparando, de acordo com o progresso do trabalho, com qual dos dois está sendo mais legal trabalhar. Aí, a partir de um certo ponto, eu prosseguiria só com um.

O chato é que isso vai tomar um tempo muito grande.

É um mar de dúvidas. A única certeza: Quero que seja um destes dois frameworks. Alguém teria como me ajudar a decidir?