Ceci est le premier article publié. J'ai décidé de commencer à vouloir quitter ce que j'ai appris d'une manière mémorable.
Récemment, j'étudie avec la devise de maîtriser profondément le django. Cet article est un tremplin pour découvrir les commandes personnalisées de django.
C'est un mécanisme qui peut exécuter des scripts python avec CUI,
・ Diverses fonctions de django (db ORM etc.) peuvent être utilisées ・ Gestion simple des commandes
Il existe des avantages tels que. Ce dernier est
-Liste des commandes disponibles-
python manage.py --help
[shop]
customcommand
cusyomcommand2
...
-Afficher la description de la commande personnalisée-
python manage.py customcommand --help
usage: manage.py customcommand2 [-h] [--version] [-v {0,1,2,3}]
[--settings SETTINGS]
[--pythonpath PYTHONPATH] [--traceback]
[--no-color] [--force-color] [--skip-checks]
Fonction pour stocker des données
C'est possible.
(1) Créer une application (cette fois créée avec le script de nom)
python manage.py startapp script
(2) Créer une structure hiérarchique de gestion / commandes
script/
├── management/
├── commands/
├── admin.py
├── apps.py
├── models.py
├── tests.py
└── views.py
(3) Mettez le fichier script sous commandes Ici, créez-le avec le nom customcommand.py
Lorsque vous lisez le commentaire de la classe baseBaseCommand, il dit "Si vous ne souhaitez pas modifier le flux d'exécution des commandes, vous pouvez utiliser une classe enfant nommée Command qui hérite de la classe BaseCommand", c'est donc basique. Je pense que la configuration suivante est correcte.
customcommand.py
class Command(BaseCommand):
#Décrivez le contenu que vous souhaitez traiter dans le script dans la fonction de poignée remplacée
def handle(self, *args, **options):
pass
Ceci est une histoire sur la façon dont la commande personnalisée du sujet principal est appelée et quel type de fonction est utilisé pour le traitement.
Le flux de traitement est le suivant.
Exécutez
python manage.py customcommand```
Appelez la classe Command
méthode run_from_argv
méthode create_parser
méthode add_arguments
méthode parse_args
méthode d'exécution
méthode de poignée
J'ai eu l'image qu'une fonction appelée run_from_argv montre le flux de traitement global et effectue un traitement détaillé dans d'autres fonctions. Par conséquent, le concept de traitement détaillé après 4 est décrit ci-dessous.
Les arguments se présentent sous la forme [argument de ligne de commande [0], argument de ligne de commande [1]] -> Dans cet exemple, ['manage.py', 'customcommand']
Tout d'abord, découpez le nom de fichier de manage.py. -> Si manage.py est décrit avec le chemin complet, seul manage.py sera récupéré ici.
Ensuite, créez un objet Parser. L'objet Parser possède les attributs suivants. -prog: "manage.py customcommand" (commandes séparées par des espaces) -description: instruction d'aide (obtenue par self.help) -formatter_class: (option d'aide Django prédéterminée telle que --version) Tel
Ajoutez l'argument que vous souhaitez utiliser dans le processus à l'objet analyseur. Par exemple
parser.add_argument('parameters', nargs='+', type=int)
Ensuite, vous pouvez forcer un ou plusieurs arguments de type int.
-> `` `` python manage.py customcommand 3 5``` etc.
### 6. méthode parse_args
Ici, vérifiez le format du groupe de commandes réellement entré.
・ Si l'option d'aide de Django telle que --version arrive, terminez le processus ici.
-Si le format d'entrée est différent, l'argument attendu (contenu de l'analyseur) est sorti en standard.
### 7,8. Méthode execute, méthode handle
Ce n'est que lorsque le contrôle de format est passé dans le processus de 6, il est passé à la méthode execute et passé à la méthode handle.
* Si un argument est ajouté dans le processus de 5, il peut être référencé à partir de l'argument options de la méthode handle.
# 5. Personnalisez les commandes personnalisées
### Ajouter une instruction d'aide pour la commande
```python
help = 'Fonction pour'
OK si vous définissez l'argument d'aide
Un bref résumé de la façon d'utiliser ArgumentParser Cela a été expliqué en détail dans cet article.
J'ai beaucoup cherché, mais j'ai eu l'impression que ce serait bien si je mettais la fonction handle, la fonction add_arguments et l'ajout d'aide. En ce qui concerne le concept d'objet d'analyse, il semble être largement utilisé pour gérer les arguments variables, donc je l'ai appris.
Recommended Posts