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.
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.
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>
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
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
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
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.
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!
Recommended Posts