Django es el entorno de desarrollo web para perfeccionistas con límites de tiempo

Escribir comandos de administración en Django

Muchas veces nos gustaría crear comandos propios que puedan ejecutarse mediante django-admin.py ó el manage.py de nuestro proyecto. Django permite crear comandos de administración específicos para cada aplicación de nuestro proyecto.

Para programar comandos de una aplicación, dentro de la carpeta de la aplicación debemos crear un directorio llamado management y dentro de éste otro llamado commands. Obviamente, para que funcionen los comandos, debemos asegurarnos de que nuestra aplicación está incluída en el setting INSTALLED_APPS. También debemos incluir un archivo __init__.py vacío en cada directorio que hemos creado (para que el directorio se interprete como un módulo de Python). Dentro de commands incluiremos un archivo .py por cada comando que deseemos utilizar para nuestra aplicación, quedando finalmente una estructura como esta:

mi_aplicacion/
    __init__.py
    models.py
    management/
        __init__.py
        commands/
            __init__.py
            un_comando.py
            otro_comando.py
    views.py

El nombre que tenga cada archivo .py dentro de commands será el nombre del comando. Si por ejemplo creamos un archivo enviar.py, nuestro código se ejecutará cuando se utilice el comando manage.py enviar. Dentro de cada archivo de comando tenemos que crear una clase Command que herede alguna de las clases básicas de comandos.

Todas las clases básicas de comandos heredan de django.core.management.base.BaseCommand. Tu comando puede heredar directamente la clase BaseCommand pero hay otras clases de comandos que permiten crear distintos tipos de comando de una forma más sencilla:

AppCommand

Facilita la creación de comandos de administración que reciben una lista de nombres de aplicaciones Django como argumento y que hacen algo con cada uno de los nombres de las aplicaciones. El comando sqlall de Django funciona de esta manera.

LabelCommand

Hace lo mismo que AppCommand pero la lista de argumentos que recibe puede ser cualquier cosa y no sólo nombres de aplicaciones. El comando startproject utiliza esto para recibir como parámetro el nombre o nombres de proyectos a crear.

NoArgsCommand

Es lo más útil para crear comandos sencillos que no reciben ningún argumento. Un ejemplo de comando basado en NoArgsCommand es el conocido syncdb que utilizamos para sincronizar nuestros modelos con la base de datos.

Vamos a ver cómo crear un comando sencillo sin entrada de parámetros. Para ello utilizamos NoArgsCommand:

# -*- encoding: utf-8 -*-
from django.core.management.base import NoArgsCommand

class Command(NoArgsCommand):
    help = "Breve descripción de lo que hace el comando."

    def handle_noargs(self, **options):
        # aquí va el código de mi comando
        print 'Comando ejecutado'

Si necesitamos automatizar nuestro comando para que se ejecute automáticamente cada un intervalo de tiempo determinado podemos utilizar django-chronograph, del que ya hablamos anteriormente en este blog.

Puedes ver ejemplos de comandos que implementa Django en django.core.management.commands. También te será util leer el gran artículo de B-List sobre comandos de administración.

Publicado por Antonio Melé el Tuesday 19 de May de 2009 Compártelo: Facebook: Twitter: | Categorías: admin, comandos, tutorial

Entradas similares

Utilizar un formulario para modificar dos modelos

Actualización/Update: Zack translated this post into english and it is available here.

A veces tenemos que modificar información relativa a dos o más ...


Personalizar el título del sitio de administración

¿Te has cansado del monótono título "Administración de Django" que aparece en el sitio de administración de tu proyecto? Django permite personalizar las plantillas ...


 
Ejecutar tareas automáticas con django-chronograph

Django-chronograph es una aplicación que permite programar la ejecución de tareas automáticas de manage.py utilizando cron. Permite especificar las tareas a realizar y ...


Crear una imagen de nuestros modelos con django-command-extensions

Algo interesante que nos aporta django-command-extensions es poder crear una representación gráfica de nuestros modelos (o por decirlo de otro modo nuestro esquema de ...


 
 

0 comentarios:

No hay ningún comentario todavía.

Escribe un comentario: