DjangoComandos de gestión

Introducción

Los comandos de administración son scripts potentes y flexibles que pueden realizar acciones en su proyecto Django o en la base de datos subyacente. ¡Además de varios comandos predeterminados, es posible escribir los tuyos!

En comparación con los scripts de Python normales, el uso del marco de comandos de administración significa que un trabajo de configuración tedioso se realiza automáticamente entre bastidores.

Observaciones

Los comandos de gestión se pueden llamar desde:

  • django-admin <command> [options]
  • python -m django <command> [options]
  • python manage.py <command> [options]
  • ./manage.py <command> [options] si manage.py tiene permisos de ejecución ( chmod +x manage.py )

Para utilizar comandos de gestión con Cron:

*/10 * * * * pythonuser /var/www/dev/env/bin/python /var/www/dev/manage.py <command> [options] > /dev/null

Creación y ejecución de un comando de gestión

Para realizar acciones en Django utilizando la línea de comandos u otros servicios (donde no se usa el usuario / solicitud), puede usar los management commands .

Los módulos Django se pueden importar según sea necesario.

Para cada comando se necesita crear un archivo separado: myapp/management/commands/my_command.py
(Los directorios de management y commands deben tener un archivo __init__.py vacío)

from django.core.management.base import BaseCommand, CommandError

# import additional classes/modules as needed
# from myapp.models import Book

class Command(BaseCommand):
    help = 'My custom django management command'

    def add_arguments(self, parser):
       parser.add_argument('book_id', nargs='+', type=int)
       parser.add_argument('author' , nargs='+', type=str)

    def handle(self, *args, **options):
       bookid = options['book_id'] 
       author = options['author']
       # Your code goes here
        
        # For example:
        # books = Book.objects.filter(author="bob")
        # for book in books:
        #    book.name = "Bob"
        #    book.save()

Aquí es obligatorio el nombre de clase Comando, que amplía BaseCommand o una de sus subclases.

El nombre del comando de administración es el nombre del archivo que lo contiene. Para ejecutar el comando en el ejemplo anterior, use lo siguiente en el directorio de su proyecto:

python manage.py my_command

Tenga en cuenta que iniciar un comando puede demorar unos segundos (debido a la importación de los módulos). Entonces, en algunos casos, se recomienda crear procesos de daemon lugar de management commands de management commands .

Más sobre los comandos de gestión

Obtener lista de comandos existentes

Puede obtener la lista de comandos disponibles de la siguiente manera:

>>> python manage.py help

Si no entiende ningún comando o busca argumentos opcionales, puede usar el argumento -h como este

>>> python manage.py command_name -h

Aquí command_name será su nombre de comando deseado, esto le mostrará el texto de ayuda del comando.

>>> python manage.py runserver -h          
>>> usage: manage.py runserver [-h] [--version] [-v {0,1,2,3}]
                           [--settings SETTINGS] [--pythonpath PYTHONPATH]
                           [--traceback] [--no-color] [--ipv6] [--nothreading]
                           [--noreload] [--nostatic] [--insecure]
                           [addrport]

Starts a lightweight Web server for development and also serves static files.

positional arguments:
  addrport              Optional port number, or ipaddr:port

optional arguments:
  -h, --help            show this help message and exit
  --version             show program's version number and exit
  -v {0,1,2,3}, --verbosity {0,1,2,3}
                        Verbosity level; 0=minimal output, 1=normal output,
                        2=verbose output, 3=very verbose output
  --settings SETTINGS   The Python path to a settings module, e.g.
                        "myproject.settings.main". If this isn't provided, the
                        DJANGO_SETTINGS_MODULE environment variable will be
                        used.
  --pythonpath PYTHONPATH
                        A directory to add to the Python path, e.g.
                        "/home/djangoprojects/myproject".
  --traceback           Raise on CommandError exceptions
  --no-color            Don't colorize the command output.
  --ipv6, -6            Tells Django to use an IPv6 address.
  --nothreading         Tells Django to NOT use threading.
  --noreload            Tells Django to NOT use the auto-reloader.
  --nostatic            Tells Django to NOT automatically serve static files
                        at STATIC_URL.
  --insecure            Allows serving static files even if DEBUG is False.

Lista de comandos disponibles

Usando django-admin en lugar de manage.py

Puede deshacerse de manage.py y usar el comando django-admin lugar. Para hacerlo, tendrá que hacer manualmente lo que manage.py hace:

  • Añade tu ruta de proyecto a tu PYTHONPATH
  • Establecer el DJANGO_SETTINGS_MODULE
export PYTHONPATH="/home/me/path/to/your_project"
export DJANGO_SETTINGS_MODULE="your_project.settings"

Esto es especialmente útil en un virtualenv donde puede configurar estas variables de entorno en el script postactivate .

django-admin comando django-admin tiene la ventaja de estar disponible donde sea que esté en su sistema de archivos.

Comandos de gestión incorporados

Django viene con una serie de comandos de administración incorporados, que utilizan python manage.py [command] o, cuando manage.py tiene derechos + x (ejecutables) simplemente ./manage.py [command] . Los siguientes son algunos de los más utilizados:

Obtener una lista de todos los comandos disponibles

./manage.py help

Ejecute su servidor Django en localhost: 8000; esencial para las pruebas locales

./manage.py runserver

Ejecute una consola de python (o ipython si está instalada) con la configuración de Django de su proyecto precargada (intentar acceder a partes de su proyecto en un terminal de python sin hacer esto fallará).

./manage.py shell

Cree un nuevo archivo de migración de base de datos en función de los cambios que haya realizado en sus modelos. Ver migraciones

./manage.py makemigrations

Aplique las migraciones no aplicadas a la base de datos actual.

./manage.py migrate

Ejecute la suite de prueba de su proyecto. Ver Unidad de Pruebas

./manage.py test

Tome todos los archivos estáticos de su proyecto y colóquelos en la carpeta especificada en STATIC_ROOT para que puedan ser servidos en producción.

./manage.py collectstatic

Permitir crear superusuario.

./manage.py createsuperuser

Cambia la contraseña de un usuario específico.

./manage.py changepassword username

Lista completa de comandos disponibles