Django
Comandi di gestione
Ricerca…
introduzione
I comandi di gestione sono script potenti e flessibili che possono eseguire azioni sul progetto Django o sul database sottostante. Oltre ai vari comandi predefiniti, è possibile scrivere i propri!
Rispetto ai normali script Python, l'utilizzo del framework dei comandi di gestione significa che alcune noiose operazioni di configurazione vengono eseguite automaticamente dietro le quinte.
Osservazioni
I comandi di gestione possono essere chiamati da:
-
django-admin <command> [options]
-
python -m django <command> [options]
-
python manage.py <command> [options]
-
./manage.py <command> [options]
se manage.py ha permessi di esecuzione (chmod +x manage.py
)
Per usare i comandi di gestione con Cron:
*/10 * * * * pythonuser /var/www/dev/env/bin/python /var/www/dev/manage.py <command> [options] > /dev/null
Creazione ed esecuzione di un comando di gestione
Per eseguire azioni in Django utilizzando la riga di comando o altri servizi (in cui l'utente / richiesta non viene utilizzato), è possibile utilizzare i management commands
.
I moduli Django possono essere importati secondo necessità.
Per ogni comando è necessario creare un file separato: myapp/management/commands/my_command.py
(Le directory di management
e commands
devono avere un file __init__.py vuoto)
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()
Qui il nome della classe Command è obbligatorio che estende BaseCommand o una delle sue sottoclassi.
Il nome del comando di gestione è il nome del file che lo contiene. Per eseguire il comando nell'esempio precedente, utilizzare quanto segue nella directory del progetto:
python manage.py my_command
Si noti che l'avvio di un comando può richiedere alcuni secondi (a causa dell'importazione dei moduli). Quindi in alcuni casi si consiglia di creare processi
daemon
invece dimanagement commands
dimanagement commands
.
Maggiori informazioni sui comandi di gestione
Ottieni l'elenco dei comandi esistenti
È possibile ottenere l'elenco dei comandi disponibili seguendo la seguente procedura:
>>> python manage.py help
Se non capisci alcun comando o cerchi argomenti opzionali, puoi usare l'argomento -h come questo
>>> python manage.py command_name -h
Qui command_name sarà il tuo nome comando desiderato, questo ti mostrerà il testo di aiuto dal 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.
Elenco dei comandi disponibili
Utilizzando django-admin invece di manage.py
Puoi sbarazzarti di manage.py
e usare invece il comando django-admin
. Per fare ciò, dovrai fare manualmente ciò che manage.py
fa:
- Aggiungi il tuo percorso di progetto al tuo PYTHONPATH
- Imposta il DJANGO_SETTINGS_MODULE
export PYTHONPATH="/home/me/path/to/your_project"
export DJANGO_SETTINGS_MODULE="your_project.settings"
Ciò è particolarmente utile in una virtualizzazione in cui è possibile impostare queste variabili di ambiente nello script postactivate
.
django-admin
comando django-admin
ha il vantaggio di essere disponibile ovunque tu sia sul tuo filesystem.
Comandi di gestione incorporati
Django viene fornito con una serie di comandi di gestione incorporati, usando python manage.py [command]
o, quando manage.py ha diritti + x (eseguibili) semplicemente ./manage.py [command]
. I seguenti sono alcuni dei più usati:
Ottieni un elenco di tutti i comandi disponibili
./manage.py help
Esegui il tuo server Django su localhost: 8000; essenziale per i test locali
./manage.py runserver
Esegui una console python (o ipython se installata) con le impostazioni Django del tuo progetto precaricato (il tentativo di accedere a parti del tuo progetto in un terminale python senza farlo fallirebbe).
./manage.py shell
Crea un nuovo file di migrazione del database in base alle modifiche apportate ai tuoi modelli. Vedi Migrazioni
./manage.py makemigrations
Applicare eventuali migrazioni non applicate al database corrente.
./manage.py migrate
Esegui la suite di test del tuo progetto. Vedi Test unitario
./manage.py test
Prendere tutti i file statici del progetto e inserirli nella cartella specificata in STATIC_ROOT
modo che possano essere pubblicati in produzione.
./manage.py collectstatic
Permette di creare superutente.
./manage.py createsuperuser
Cambia la password di un utente specificato.
./manage.py changepassword username
Elenco completo dei comandi disponibili