Por estes dias tive dois percalços no desenvolvimento de um projeto em Django:
1. Qual a “melhor maneira mais rápida” de colocar um pequeno projeto em Django a rodar em produção em uma rede internar ?
Bom, viram que a expressão está entre aspas pois é uma forma de dizer o melhor custo benefício ! hehehe O que ocorria era que eu precisava colocar um pequeno sistema Django no ar, na rede interna, que não dependesse de muitas coisas, principalmente um Apache ou library. Então procurei algumas opções e achei basicamente 1: CherryPy
O CherryPy é um servidor de aplicações puramente Python, e que como vi alguns dizer por ai, é o mais “paythonico” de todos. Cheguei a ele através do django-cpserver, que é um addon aos comandos do manage.py, que roda a aplicação através do WSGI server do CherryPy. Não sei se é a melhor forma de servir meu projeto Django em um servidor interno, que não terá obviamente um acesso quenem o do twitter, mas tento fazer da melhor forma possível
Bom, para funcionar, baixe e instale o CherryPy.
Depois baixe o django-cpserver, e coloque-o em seu PYTHON_PATH ( eu coloquei dentro do diretorio do meu projeto Django ) e adicione-o às INSTALLED_APPS.
Pronto agora basta rodar o comando abaixo para tê-lo rodando via WSGI do CherryPy:
python manage.py runcpserver
Para alterar a porta por exemplo rode:
python manage.py runcpserver port=80
E para mais informações rode:
python manage.py runcpserver help
Aqui e Aqui tem mais informações sobre os frameworks e sobre o CherryPy tb.
2. Como efetuar um redirecionamento nas views do Django passando alguns parametros por POST ?
Descobri que não tem como! Pelo pouco que entendi é inclusive uma restrição do protocolo HTTP e não do Django.
Então, utilizei a sessão para passar algumas informações necessárias na minha view, exemplo uma mensagem…
Vamos ao código:
def index(request):
#pega o parametro da sessão
mensagem = request.session.get('mensagem','')
#retira o parametro da sessão para que não fique para o proximo request
try:
del request.session['mensagem']
except KeyError:
pass
#retorna os dados.. no template terá disponível a variavel 'msg' com a mensagem a ser mostrada.
return render_to_response('index.html', {'msg': mensagem}, context_instance=RequestContext(request))
def salvar_exemplo(request):
info = Dados.objects.get(id=request.POST['id'])
#.... tratamento das informações
request.session['mensagem'] = 'minha mensagem de retorno'
return HttpResponseRedirect('/index/')
E assim, resolvi meu problema..
Bacana, Sergio!
Estou estudando o CherryPy, ele pode funcionar perfeitamente sozinho com uma pequena aplicação, ou estou enganada?
Preciso desenvolver um pequeno sistema, sendo que o Django tem muitos recursos que eu não precisarei e então fiquei preocupada com a escalabilidade. De qualquer forma, já tentou usar o CherryPy com uma biblioteca ORM? O que acha?
Oi Claudia!
Pode sim, ele é um servidor de aplicações e lhe dá o que é necessário para agregar outros frameworks também ou trabalhar somente com ele !
É uma ótima opção !
Assim como o Flask também !
Não conhecia o Flask, mas achei bem interessante.
Vou testá-lo também para ver como se comporta.
Valeu as dicas, Sergio!