Django
Comandos de gestión
Buscar..
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 demanagement commands
demanagement 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.
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