[PYTHON] Erstellen Sie benutzerdefinierte Django-Befehle und führen Sie sie über die Befehlszeile aus

Erstellen Sie benutzerdefinierte Django-Befehle, um die Verarbeitung über die Befehlszeile durchzuführen

Einführung

Bei der Entwicklung einer Webanwendung möchten Sie möglicherweise eine bestimmte Verarbeitung (Aggregationsverarbeitung, API-Aufruf, E-Mail-Zustellung usw.) über die Befehlszeile ausführen. Dieser Artikel zeigt Ihnen, wie Sie einen Prozess zum Ausführen einer Django-Anwendung über die Befehlszeile schreiben.

Django-Befehlszeilentools

Standardmäßig wird Django mit Befehlszeilentools geliefert, mit denen Sie über die Befehlszeile Folgendes ausführen können:

python manage.py startapp sample =>Eine Anwendung erstellen
python manage.py migrate         =>DB-Migration ausführen
python manage.py shell           =>Starten Sie die interaktive Shell
python manage.py runserver       =>Starten Sie den Entwicklungsserver

Es stehen viele andere Befehle zur Verfügung, und Sie können "python manage.py" eingeben, um eine Liste der verfügbaren Befehle anzuzeigen.

% 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

Um eine detailliertere Hilfe für einen bestimmten Befehl zu erhalten, geben Sie "help" gefolgt vom Namen des Befehls ein, auf den Sie verweisen möchten, z. B. "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.

Erstellen von benutzerdefinierten Befehlen für Django

Die Befehlszeilentools von Django bieten einen Mechanismus zum Hinzufügen von Befehlen. Nachdem Sie einen benutzerdefinierten Befehl hinzugefügt haben, können Sie ihn wie folgt über ein Befehlszeilentool ausführen:

python manage.py <Benutzerdefinierter Befehlsname>

Stichprobe

Fügen Sie dieser Blog-Verwaltungsanwendung dieses Mal einen benutzerdefinierten Befehl hinzu und führen Sie ihn aus. Bitte überprüfen Sie den Inhalt des verlinkten Github auf den endgültigen Quellcode.

Die Struktur des Blog-Verzeichnisses der Blog-Verwaltungsanwendung ist wie folgt.

├── blog
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── forms.py
│   ├── migrations/
│   ├── models.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── django_sample/
├── manage.py
└── requirements.txt

Ein Verzeichnis erstellen

Erstellen Sie zunächst ein Verzeichnis (Verwaltung / Befehle) zum Speichern von Befehlen unter der Blog-Anwendung.

mkdir -p blog/management/commands
touch blog/management/__init__.py
touch blog/management/commands/__init__.py  

Befehl erstellen

Erstellen Sie als Nächstes count_entry.py, den Hauptteil des Befehls, im erstellten Verzeichnis (management / command /).

vi blog/management/commands/count_entry.py

Benutzerdefinierte Befehle erben von der BaseCommand-Klasse, um eine Klasse zu erstellen. Der eigentliche Verarbeitungskörper wird in der "Handle" -Methode beschrieben. Dieses Mal erstellen wir ein Programm, das die Anzahl der als Argument übergebenen Blog-Artikel anzeigt.

count_entry.py


# -*- coding:utf-8 -*-


from django.core.management.base import BaseCommand

from ...models import Article


#Erstellt durch Erben von BaseCommand
class Command(BaseCommand):
    # python manage.py help count_Nachricht wird durch Eingabe angezeigt
    help = 'Display the number of blog articles'

    #Geben Sie Befehlszeilenargumente an.(Argparse-Modul https://docs.python.org/2.7/library/argparse.html)
    #Diesmal Blog_Erhalten Sie es mit der Namens-ID. (Mindestens ein Argument,int type)
    def add_arguments(self, parser):
        parser.add_argument('blog_id', nargs='+', type=int)

    #Die Methode, die aufgerufen wird, wenn der Befehl ausgeführt wird
    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))

Die endgültige Verzeichnisstruktur lautet wie folgt.

blog
├── __init__.py
├── admin.py
├── apps.py
├── forms.py
├── management =>Verzeichnis zum Speichern benutzerdefinierter Befehle
│   ├── __init__.py
│   └── commands
│       ├── __init__.py
│       └── count_entry.py
├── migrations/
├── models.py
├── tests.py
├── urls.py
└── views.py

Benutzerdefinierte Befehle ausführen

Lassen Sie uns den erstellten benutzerdefinierten Befehl ausführen. Führen Sie zunächst "python manage.py" aus, um festzustellen, ob benutzerdefinierte Befehle hinzugefügt wurden.

% python manage.py 

Type 'manage.py help <subcommand>' for help on a specific subcommand.

Available subcommands:

[auth]
    changepassword
    createsuperuser

[blog]
    count_entry =>Wurde hinzugefügt

[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

Der Befehl count_entry wurde hinzugefügt. Geben Sie dann "python manage.py count_entry 1" ein, um den von Ihnen erstellten benutzerdefinierten Befehl auszuführen.

% python manage.py count_entry 1
Article count = "2"

Ein benutzerdefinierter Befehl wurde ausgeführt und die Anzahl der Artikel im Blog wurde angezeigt. Sie können den Hilfebefehl auch wie einen normalen Django-Befehl verwenden. Der erstellte Befehl kann regelmäßig mit cron usw. wie ein normales Skript ausgeführt werden.

Am Ende

Dieses Mal habe ich vorgestellt, wie ein benutzerdefinierter Befehl erstellt wird, der über das Befehlszeilentool von Django ausgeführt werden kann. Ich denke, es gibt viele Fälle, in denen Sie Ihre eigenen Befehle erstellen, beispielsweise wenn Sie die Verarbeitung regelmäßig mit cron ausführen möchten. Warum erstellen Sie keinen benutzerdefinierten Befehl für Django und verwenden ihn? Viel Spaß beim Django-Leben!

Referenzseite

Recommended Posts

Erstellen Sie benutzerdefinierte Django-Befehle und führen Sie sie über die Befehlszeile aus
So erstellen Sie einen Artikel über die Befehlszeile
Tauche ein in den Django Custom Befehl [1]
[EC2] So installieren und laden Sie chromedriver über die Befehlszeile herunter
Öffnen Sie die Chrome-Version von LINE über die Befehlszeile [Linux].
DJango Hinweis: Von Anfang an (Vereinfachung und Aufteilung von URLConf)
Suchen Sie unter Linux über die Befehlszeile nach großen Dateien
Poste Twitter über die Kommandozeile
Erstellen und listen Sie Django-Modelle auf
[Django] Organisiere Befehle und Rollen
Installieren Sie Chrome in der Befehlszeile von Sakura VPS (Ubuntu) und starten Sie Chrome mit Python über das virtuelle Display und Selen
Führen Sie Pylint aus und lesen Sie die Ergebnisse
DJango Memo: Von Anfang an (Vorbereitung)
Erstellung eines benutzerdefinierten Splunk-Suchbefehls Teil 2
Erstellen Sie mit Django einen LINE-Bot
Abrufen, Testen und Senden von Testfällen im AtCoder-Wettbewerb über die Befehlszeile
Rufen Sie Optionen in Python sowohl aus JSON-Dateien als auch aus Befehlszeilenargumenten ab
Stellen Sie Django + React von Grund auf auf GKE bereit. (4) Erstellen Sie Cluster- und Container-PUSH
Erhalten Sie Nachrichten von jedem der drei großen Mobilfunkunternehmen mithilfe von Django und der Nachrichten-API
Erstellen Sie mit RDKit einen Befehl zum Suchen nach ähnlichen Verbindungen aus der Zieldatenbank und überprüfen Sie die Verarbeitungszeit