Django
Commandes de gestion
Recherche…
Introduction
Les commandes de gestion sont des scripts puissants et flexibles pouvant effectuer des actions sur votre projet Django ou la base de données sous-jacente. En plus des diverses commandes par défaut, il est possible d’écrire votre propre commande!
Comparé aux scripts Python classiques, l'utilisation de la structure de commande de gestion signifie que des tâches d'installation fastidieuses sont effectuées automatiquement pour vous.
Remarques
Les commandes de gestion peuvent être appelées à partir de:
-
django-admin <command> [options]
-
python -m django <command> [options]
-
python manage.py <command> [options]
-
./manage.py <command> [options]
si manage.py a des droits d'exécution (chmod +x manage.py
)
Pour utiliser des commandes de gestion avec Cron:
*/10 * * * * pythonuser /var/www/dev/env/bin/python /var/www/dev/manage.py <command> [options] > /dev/null
Création et exécution d'une commande de gestion
Pour effectuer des actions dans Django en utilisant la ligne de commande ou d'autres services (où l'utilisateur / la demande n'est pas utilisé), vous pouvez utiliser les management commands
.
Les modules Django peuvent être importés selon vos besoins.
Pour chaque commande, un fichier séparé doit être créé: myapp/management/commands/my_command.py
(Les répertoires de management
et de commands
doivent avoir un fichier __init__.py vide)
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()
Ici, le nom de classe Command est obligatoire et étend BaseCommand ou l'une de ses sous-classes.
Le nom de la commande de gestion est le nom du fichier le contenant. Pour exécuter la commande dans l'exemple ci-dessus, utilisez ce qui suit dans votre répertoire de projet:
python manage.py my_command
Notez que le démarrage d'une commande peut prendre quelques secondes (à cause de l'importation des modules). Ainsi, dans certains cas, il est conseillé de créer des processus
daemon
au lieu demanagement commands
demanagement commands
.
Plus d'informations sur les commandes de gestion
Obtenir la liste des commandes existantes
Vous pouvez obtenir la liste des commandes disponibles de la manière suivante:
>>> python manage.py help
Si vous ne comprenez aucune commande ou recherchez des arguments facultatifs, vous pouvez utiliser l'argument -h comme ceci
>>> python manage.py command_name -h
Ici command_name sera le nom de votre commande désirée, cela vous montrera le texte d'aide de la commande.
>>> 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.
Liste des commandes disponibles
Utiliser django-admin au lieu de manage.py
Vous pouvez vous débarrasser de manage.py
et utiliser la commande django-admin
place. Pour ce faire, vous devrez faire manuellement ce que manage.py
:
- Ajoutez le chemin de votre projet à votre PYTHONPATH
- Définissez le DJANGO_SETTINGS_MODULE
export PYTHONPATH="/home/me/path/to/your_project"
export DJANGO_SETTINGS_MODULE="your_project.settings"
Ceci est particulièrement utile dans un virtualenv où vous pouvez définir ces variables d'environnement dans le script postactivate
.
django-admin
commande django-admin
a l'avantage d'être disponible où que vous soyez sur votre système de fichiers.
Commandes de gestion intégrée
Django est livré avec un certain nombre de commandes de gestion intégrées, utilisant python manage.py [command]
ou, lorsque manage.py a + x (exécutable) droits simplement ./manage.py [command]
. Les éléments suivants sont parmi les plus fréquemment utilisés:
Obtenir une liste de toutes les commandes disponibles
./manage.py help
Exécutez votre serveur Django sur localhost: 8000; essentiel pour les tests locaux
./manage.py runserver
Exécutez une console python (ou ipython si installé) avec les paramètres Django de votre projet préchargé (toute tentative d'accès à des parties de votre projet dans un terminal Python échouera).
./manage.py shell
Créez un nouveau fichier de migration de base de données en fonction des modifications apportées à vos modèles. Voir Migrations
./manage.py makemigrations
Appliquez toutes les migrations non appliquées à la base de données en cours.
./manage.py migrate
Exécutez la suite de tests de votre projet. Voir les tests unitaires
./manage.py test
Prenez tous les fichiers statiques de votre projet et mettez-les dans le dossier spécifié dans STATIC_ROOT
pour qu'ils puissent être STATIC_ROOT
en production.
./manage.py collectstatic
Permet de créer un superutilisateur.
./manage.py createsuperuser
Modifiez le mot de passe d'un utilisateur spécifié.
./manage.py changepassword username
Liste complète des commandes disponibles