En un principio, para crear scripts que automatizen cierto proceso escribía un script en python que empezaba por:
from django.conf improt settings
os.environ["DJANGO_SETTINGS_MODULE"] = "proj.settings"
from app1.models import *
# ....
Pero me entro la curiosidad por hacerlo de "mejor" manera. Entonces la opción que encontre es extender los comandos de administración (management), esos que estan disponibles mediante el script management.py:
rolando@rhotergeist:~/proj$ ./manage.py help
Type 'manage.py help <subcommand>' for help on a specific subcommand.
Available subcommands:
adminindex
createcachetable
dbshell
diffsettings
dumpdata
flush
...
A pesar de no estar documentado
, no es complicado crear "nuevos comandos". Estos son los primeros pasos para crear un comando básico:
1. elegir la aplicación (app en jerga django) y nombre del comando: sayhello
2. crear el "package" adecuado de comandos dentro nuestro app
$ mkdir -p app/management/commands
$ touch app/management/__init__.py
$ touch app/management/commands/__init__.py
Los __init__.py son importantes para poder hacer from app.management.comands import *, sino no "reconocerá" el módulo|package.
Luego creamos el archivo de nuestro comando sayhello en app/management/commands/sayhello.py:
# sayhello.py
from django.core.management import BaseCommand
class Command(BaseCommand):
help = "This command says hello"
def handle(self, *args, **kwds):
print "hello"
Eso es suficiente
rolando@rhotergeist:~/proj$ ./manage.py sayhello
hello
De ahí se puede interactuar con los models, parsear información e insertar en la db, etc. python style!
Tambien xisten más clases de comandos, ej: LabelCommand, NoArgsCommand, etc. dependiendo el tipo de comando que queramos hacer.
import this
