Monday, November 9, 2009

Como usar bpython com Django

O bpython é um espetacular console interativo Python com auto-completar visual e help. Funciona no Linux, Mac OSX e Unixes em geral, mas não no Windows porque depende do módulo curses.

Os screenshots não fazem justiça ao programa, porque nele tudo é dinâmico, então você precisa mesmo experimentar para sacar. Além disso ele é mais bonito no Linux que no Mac OSX porque as linhas verticais aparecem contínuas.

Para quem usa Windows, o IPython também é legal, e vale muito a pena usá-lo com o Django.

Mas para quem pode usar o bpython eis como fazer.



Método 1: ler manualmente os settings do django

1) Inicie a sessão do bpython a partir do diretório principal do seu projeto Django (onde fica o arquivo settings.py).

2) Digite no prompt >>>

from django.core.management import setup_environ
import settings
setup_environ(settings)


A partir desse ponto, você pode interagir normalmente com os modelos e outros objetos da sua aplicação Django.



Metodo 2: rodar um script que lê os settings, e entrar em modo interativo


1) crie um arquivo (digamos, .dbpython.py) com o conteúdo:

from django.core.management import setup_environ
import settings
setup_environ(settings)
from minha_app.models import * # opcional


Note que a quarta linha é opcional, e você precisa alterar o nome da app, e repetir essa linha para cada app que quiser acessar com mais comodidade.

2) execute o script usando o bpython com a opção -i (que faz entrar em modo interativo, como no python normal):

$ bpython -i dbpython.py


3) Bônus: para não ter que digitar o comando acima toda vez, crie um script de shell:

#!/bin/sh
# este eh o arquivo dbp.sh
bpython -i dbpython.py


Depois torne este script executável:

$ chmod +x dbp.sh


Agora basta digitar:

$ ./dbp.sh


E pronto, as maravilhas do bpython!



Metodo 3: configurar um script de inicialização para o bpython

Este é o método documentado no site do bpython:

http://docs.bpython-interpreter.org/django.html

Eu estou usando o método 2 porque gostei de ter um script dbpython.py customizado para o meu projeto atual, assim eu faço os imports dos models das apps que estou desenvolvendo.

Claro que seria possível sem muito esforço alterar o dbpython.py para fazer os imports dos models automaticamente, lendo o atributo settings.INSTALLED_APPS, mas isso fica como um exercício para o leitor.

Agradeço ao meu colega de trabalho, Fabio Montefuscolo, pela dica que deu início a este post.

3 comments:

Fred Chevitarese said...

Opa!!

Tomei a liberdade de colocar um link para o seu post em meu blog...
Se você não concordar eu removo ;)

Abraços!

Eduardo Nunes Pereira said...

Excelente post, eu não achei mais interessante que o Django Command Extensions (http://code.google.com/p/django-command-extensions/)

Mauro Baraldi said...

Show a dica eim Luciano.

O bom que se pensar um pouquinho a 1ª dica serve também para o Idle.

[ ]'s