Django
Beheeropdrachten
Zoeken…
Invoering
Beheeropdrachten zijn krachtige en flexibele scripts die acties kunnen uitvoeren op uw Django-project of de onderliggende database. Naast verschillende standaardopdrachten is het mogelijk om er zelf een te schrijven!
Vergeleken met reguliere Python-scripts betekent het gebruik van het management-opdrachtraamwerk dat achter de schermen automatisch wat saai werk voor u wordt gedaan.
Opmerkingen
Beheeropdrachten kunnen worden opgeroepen vanuit:
-
django-admin <command> [options]
-
python -m django <command> [options]
-
python manage.py <command> [options]
-
./manage.py <command> [options]
als manage.py uitvoeringsmachtigingen heeft (chmod +x manage.py
)
Beheeropdrachten gebruiken met Cron:
*/10 * * * * pythonuser /var/www/dev/env/bin/python /var/www/dev/manage.py <command> [options] > /dev/null
Een beheeropdracht maken en uitvoeren
Als u acties in Django wilt uitvoeren met de opdrachtregel of andere services (waarbij de gebruiker / het verzoek niet wordt gebruikt), kunt u de management commands
.
Django-modules kunnen naar behoefte worden geïmporteerd.
Voor elke opdracht moet een afzonderlijk bestand worden gemaakt: myapp/management/commands/my_command.py
(De mappen voor management
en commands
moeten een leeg __init__.py-bestand hebben)
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 is klassennaam Command verplicht, wat BaseCommand of een van de subklassen ervan uitbreidt.
De naam van de beheeropdracht is de naam van het bestand dat deze bevat. Om de opdracht in het bovenstaande voorbeeld uit te voeren, gebruikt u het volgende in uw projectmap:
python manage.py my_command
Merk op dat het starten van een opdracht enkele seconden kan duren (vanwege het importeren van de modules). Daarom wordt in sommige gevallen geadviseerd om
daemon
processen te maken in plaats vanmanagement commands
.
Krijg een lijst met bestaande opdrachten
U kunt op de volgende manier een lijst met beschikbare opdrachten krijgen:
>>> python manage.py help
Als u geen opdracht begrijpt of optionele argumenten zoekt, kunt u dit argument -h gebruiken
>>> python manage.py command_name -h
Hier zal command_name de naam van uw gewenste commando zijn, dit laat u de helptekst van het commando zien.
>>> 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.
Lijst met beschikbare opdracht
Gebruik django-admin in plaats van manage.py
Je kunt manage.py
en in plaats daarvan de opdracht django-admin
gebruiken. Om dit te doen, moet u handmatig doen wat manage.py
doet:
- Voeg uw projectpad toe aan uw PYTHONPATH
- Stel de DJANGO_SETTINGS_MODULE in
export PYTHONPATH="/home/me/path/to/your_project"
export DJANGO_SETTINGS_MODULE="your_project.settings"
Dit is vooral handig in een virtualenv waar u deze omgevingsvariabelen kunt instellen in het postactivate
.
django-admin
commando heeft het voordeel dat het overal beschikbaar is op uw bestandssysteem.
Ingebouwde beheeropdrachten
Django wordt geleverd met een aantal ingebouwde beheeropdrachten, met behulp van python manage.py [command]
of, als manage.py + x (uitvoerbare) rechten heeft, eenvoudig ./manage.py [command]
. De volgende zijn enkele van de meest gebruikte:
Ontvang een lijst met alle beschikbare opdrachten
./manage.py help
Voer uw Django-server uit op localhost: 8000; essentieel voor lokale testen
./manage.py runserver
Voer een python (of ipython indien geïnstalleerd) console uit met de Django-instellingen van uw project vooraf geladen (proberen toegang te krijgen tot delen van uw project in een python-terminal zonder dit te doen zal mislukken).
./manage.py shell
Maak een nieuw database-migratiebestand op basis van de wijzigingen die u in uw modellen hebt aangebracht. Zie migratie
./manage.py makemigrations
Pas niet-toegepaste migraties toe op de huidige database.
./manage.py migrate
Voer het testpakket van uw project uit. Zie Eenheidstesten
./manage.py test
Neem alle statische bestanden van uw project en zet ze in de map die is opgegeven in STATIC_ROOT
zodat ze in productie kunnen worden geserveerd.
./manage.py collectstatic
Sta toe om superuser te creëren.
./manage.py createsuperuser
Wijzig het wachtwoord van een opgegeven gebruiker.
./manage.py changepassword username
Volledige lijst met beschikbare opdrachten