[PYTHON] Plongez dans la commande Django Custom [1]

introduction

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.

table des matières

  1. Qu'est-ce qu'une commande personnalisée django?
  2. Préparation à l'utilisation des commandes personnalisées
  3. Comment créer une commande personnalisée
  4. Flux de commandes personnalisé
  5. Personnalisez les commandes personnalisées
  6. Résumé

1. Qu'est-ce qu'une commande personnalisée 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.

2. Préparation à l'utilisation des commandes personnalisées

(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

3. Comment créer une commande personnalisée

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

4. Flux de commandes personnalisé

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.

  1. Exécutez python manage.py customcommand```

  2. Appelez la classe Command

  3. méthode run_from_argv

  4. méthode create_parser

  5. méthode add_arguments

  6. méthode parse_args

  7. méthode d'exécution

  8. 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.

4. méthode create_parser

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

5. méthode add_arguments

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

Ajouter un argument

Un bref résumé de la façon d'utiliser ArgumentParser Cela a été expliqué en détail dans cet article.

6. Résumé

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

Plongez dans la commande Django Custom [1]
Créez des commandes Django personnalisées et exécutez-les à partir de la ligne de commande
Commande Django + Docker
Mettez le fichier téléchargé par django dans MinIO
À propos de la commande de service
[Django] Changer l'adresse IP par défaut de la commande runserver
Installez la commande pip
[Django] Renommer le projet
Paramètres d'achèvement de la commande Django
Comment écrire une validation personnalisée dans Django REST Framework
Application de pavé - Incorporer au projet
Cloner à l'aide de la commande dd
Accélérez la commande netstat
Jusqu'à ce que le shell trouve la commande
[Mémo d'apprentissage] Résumé de la commande Django