Lors du développement d'une application Web, vous souhaiterez peut-être effectuer un traitement spécifique (traitement d'agrégation, appel API, remise de courrier, etc.) à partir de la ligne de commande. Cet article vous montrera comment écrire un processus pour exécuter une application Django à partir de la ligne de commande.
Par défaut, Django est livré avec des outils de ligne de commande qui vous permettent de faire des choses comme ce qui suit à partir de la ligne de commande:
python manage.py startapp sample =>Créer une application
python manage.py migrate =>Exécution de la migration de base de données
python manage.py shell =>Lancez Interactive Shell
python manage.py runserver =>Démarrer le serveur de développement
Il existe de nombreuses autres commandes disponibles, et vous pouvez taper python manage.py
pour voir une liste des commandes disponibles.
% python manage.py
Type 'manage.py help <subcommand>' for help on a specific subcommand.
Available subcommands:
[auth]
changepassword
createsuperuser
[debug_toolbar]
debugsqlshell
[django]
check
compilemessages
createcachetable
dbshell
diffsettings
dumpdata
flush
inspectdb
loaddata
makemessages
makemigrations
migrate
sendtestemail
shell
showmigrations
sqlflush
sqlmigrate
sqlsequencereset
squashmigrations
startapp
startproject
test
testserver
[sessions]
clearsessions
[staticfiles]
collectstatic
findstatic
runserver
Pour une aide plus détaillée sur une commande particulière, tapez «help» suivi du nom de la commande que vous souhaitez référencer, comme «python manage.py help runserver».
% python manage.py help runserver
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.
Les outils de ligne de commande de Django fournissent un mécanisme pour ajouter des commandes. Une fois que vous avez ajouté une commande personnalisée, vous pouvez l'exécuter à partir d'un outil de ligne de commande comme suit:
python manage.py <Nom de commande personnalisé>
Cette fois, ajoutons une commande personnalisée à cette Application de gestion de blog et exécutons-la. Veuillez vérifier le contenu du Github lié pour le code source final.
La structure du répertoire de blog de l'application de gestion de blog est la suivante.
├── blog
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── forms.py
│ ├── migrations/
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── django_sample/
├── manage.py
└── requirements.txt
Tout d'abord, créez un répertoire (gestion / commandes) pour stocker les commandes sous l'application de blog.
mkdir -p blog/management/commands
touch blog/management/__init__.py
touch blog/management/commands/__init__.py
Ensuite, créez count_entry.py
, qui est le corps principal de la commande, dans le répertoire créé (management / commands /).
vi blog/management/commands/count_entry.py
Les commandes personnalisées héritent de la classe BaseCommand
pour créer une classe. Le corps de traitement réel est décrit dans la méthode «handle». Cette fois, nous allons créer un programme qui affiche le nombre d'articles de blog passés en argument.
count_entry.py
# -*- coding:utf-8 -*-
from django.core.management.base import BaseCommand
from ...models import Article
#Créé en héritant de BaseCommand
class Command(BaseCommand):
# python manage.py help count_Message affiché par entrée
help = 'Display the number of blog articles'
#Spécifiez les arguments de ligne de commande.(module argparse https://docs.python.org/2.7/library/argparse.html)
#Cette fois, le blog_Obtenez-le avec l'identifiant du nom. (Au moins un argument,type int)
def add_arguments(self, parser):
parser.add_argument('blog_id', nargs='+', type=int)
#La méthode appelée lorsque la commande est exécutée
def handle(self, *args, **options):
for blog_id in options['blog_id']:
articles_count = Article.objects.filter(blog_id=blog_id).count()
self.stdout.write(self.style.SUCCESS('Article count = "%s"' % articles_count))
La structure finale des répertoires est la suivante.
blog
├── __init__.py
├── admin.py
├── apps.py
├── forms.py
├── management =>Répertoire de stockage des commandes personnalisées
│ ├── __init__.py
│ └── commands
│ ├── __init__.py
│ └── count_entry.py
├── migrations/
├── models.py
├── tests.py
├── urls.py
└── views.py
Exécutons la commande personnalisée créée. Tout d'abord, lancez python manage.py
pour voir si des commandes personnalisées ont été ajoutées.
% python manage.py
Type 'manage.py help <subcommand>' for help on a specific subcommand.
Available subcommands:
[auth]
changepassword
createsuperuser
[blog]
count_entry =>A été ajouté
[debug_toolbar]
debugsqlshell
[django]
check
compilemessages
createcachetable
dbshell
diffsettings
dumpdata
flush
inspectdb
loaddata
makemessages
makemigrations
migrate
sendtestemail
shell
showmigrations
sqlflush
sqlmigrate
sqlsequencereset
squashmigrations
startapp
startproject
test
testserver
[sessions]
clearsessions
[staticfiles]
collectstatic
findstatic
runserver
La commande count_entry a été ajoutée. Tapez ensuite python manage.py count_entry 1
pour exécuter la commande personnalisée que vous avez créée.
% python manage.py count_entry 1
Article count = "2"
Une commande personnalisée a été exécutée et le nombre d'articles sur le blog a été affiché. Vous pouvez également utiliser la commande help comme vous le feriez avec une commande Django classique. La commande créée peut être exécutée régulièrement en utilisant cron etc. comme un script normal.
Cette fois, j'ai présenté comment créer une commande personnalisée qui peut être exécutée à partir de l'outil de ligne de commande de Django. Je pense qu'il existe de nombreux cas où vous créez vos propres commandes, par exemple lorsque vous souhaitez exécuter un traitement régulièrement avec cron. Pourquoi ne pas créer une commande personnalisée pour Django et l'utiliser? Ayez une vie Django amusante!
Recommended Posts