Django
Verwaltungsbefehle
Suche…
Einführung
Verwaltungsbefehle sind leistungsstarke und flexible Skripts, die Aktionen für Ihr Django-Projekt oder die zugrunde liegende Datenbank ausführen können. Neben verschiedenen Standardbefehlen können Sie auch eigene Befehle schreiben!
Im Vergleich zu regulären Python-Skripts bedeutet die Verwendung des Verwaltungsbefehls-Frameworks, dass hinter den Kulissen automatisch einige mühsame Einstellungsarbeiten für Sie erledigt werden.
Bemerkungen
Verwaltungsbefehle können aufgerufen werden von:
-
django-admin <command> [options]
-
python -m django <command> [options]
-
python manage.py <command> [options]
-
./manage.py <command> [options]
wenn manage.py über Ausführungsberechtigungen verfügt (chmod +x manage.py
)
So verwenden Sie Verwaltungsbefehle mit Cron:
*/10 * * * * pythonuser /var/www/dev/env/bin/python /var/www/dev/manage.py <command> [options] > /dev/null
Erstellen und Ausführen eines Verwaltungsbefehls
Um Aktionen in Django über die Befehlszeile oder andere Dienste (bei denen der Benutzer / die Anforderung nicht verwendet wird) management commands
, können Sie die management commands
.
Django-Module können bei Bedarf importiert werden.
Für jeden Befehl muss eine separate Datei erstellt werden: myapp/management/commands/my_command.py
(Die management
und commands
Verzeichnisse müssen eine leere Datei __init__.py haben)
from django.core.management.base import BaseCommand, CommandError
# import additional classes/modules as needed
# from myapp.models import Book
class Command(BaseCommand):
help = 'My custom django management command'
def add_arguments(self, parser):
parser.add_argument('book_id', nargs='+', type=int)
parser.add_argument('author' , nargs='+', type=str)
def handle(self, *args, **options):
bookid = options['book_id']
author = options['author']
# Your code goes here
# For example:
# books = Book.objects.filter(author="bob")
# for book in books:
# book.name = "Bob"
# book.save()
Hier ist der Klassenname Command obligatorisch, der BaseCommand oder eine seiner Unterklassen erweitert.
Der Name des Verwaltungsbefehls ist der Name der Datei, die ihn enthält. Um den Befehl im obigen Beispiel auszuführen, verwenden Sie Folgendes in Ihrem Projektverzeichnis:
python manage.py my_command
Beachten Sie, dass das Starten eines Befehls einige Sekunden dauern kann (aufgrund des Imports der Module). In einigen Fällen wird daher empfohlen,
daemon
anstelle vonmanagement commands
zu erstellen.
Liste der vorhandenen Befehle abrufen
Sie können eine Liste der verfügbaren Befehle auf folgende Weise erhalten:
>>> python manage.py help
Wenn Sie keinen Befehl verstehen oder nach optionalen Argumenten suchen, können Sie das Argument -h wie folgt verwenden
>>> python manage.py command_name -h
Hier wird Befehlsname Ihr Wunschbefehlsname sein, der Hilfetext des Befehls wird angezeigt.
>>> python manage.py runserver -h
>>> 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.
Verwendung von django-admin anstelle von manage.py
Sie können manage.py
loswerden und stattdessen den Befehl django-admin
verwenden. Dazu müssen Sie manuell tun, was manage.py
macht:
- Fügen Sie Ihren Projektpfad zu Ihrem PYTHONPATH hinzu
- Stellen Sie das DJANGO_SETTINGS_MODULE ein
export PYTHONPATH="/home/me/path/to/your_project"
export DJANGO_SETTINGS_MODULE="your_project.settings"
Dies ist besonders nützlich in einer virtuellen Umgebung, in der Sie diese Umgebungsvariablen im postactivate
Skript postactivate
.
django-admin
Befehl django-admin
hat den Vorteil, dass Sie überall auf Ihrem Dateisystem verfügbar sind.
Integrierte Verwaltungsbefehle
Django verfügt über eine Reihe von integrierten Verwaltungsbefehlen, die python manage.py [command]
oder wenn manage.py + x (ausführbare) Rechte hat, einfach ./manage.py [command]
. Nachfolgend einige der am häufigsten verwendeten:
Rufen Sie eine Liste aller verfügbaren Befehle ab
./manage.py help
Führen Sie Ihren Django-Server auf localhost aus: 8000; unverzichtbar für lokale Tests
./manage.py runserver
Führen Sie eine Python-Konsole (oder, falls installiert, eine IPython-Konsole) mit den Django-Einstellungen Ihres Projekts vor (wenn Sie versuchen, auf Teile Ihres Projekts in einem Python-Terminal zuzugreifen, ohne dass dies fehlschlägt, schlägt dies fehl).
./manage.py shell
Erstellen Sie eine neue Datenbankmigrationsdatei basierend auf den Änderungen, die Sie an Ihren Modellen vorgenommen haben. Siehe Migrationen
./manage.py makemigrations
Wenden Sie alle nicht verwendeten Migrationen auf die aktuelle Datenbank an.
./manage.py migrate
Führen Sie die Testsuite Ihres Projekts aus. Siehe Gerätetest
./manage.py test
Nehmen Sie alle statischen Dateien Ihres Projekts und STATIC_ROOT
Sie sie in dem in STATIC_ROOT
angegebenen Ordner STATIC_ROOT
damit sie in der Produktion STATIC_ROOT
werden können.
./manage.py collectstatic
Erlaube, Superuser zu erstellen.
./manage.py createsuperuser
Ändern Sie das Passwort eines angegebenen Benutzers.
./manage.py changepassword username
Vollständige Liste der verfügbaren Befehle