Ingresar:

Rho :: Blog :: Creando "comandos" en django

May 07, 2008

user icon
Rho

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 Cry , 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 Cool

 
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

Palabras clave: comandos, django, no-ooxml, python

Enviado por Rho


Debes iniciar sesión para enviar un comentario.