Django
Polecenia zarządzania
Szukaj…
Wprowadzenie
Polecenia zarządzania to potężne i elastyczne skrypty, które mogą wykonywać działania na projekcie Django lub bazowej bazie danych. Oprócz różnych domyślnych poleceń można pisać własne!
W porównaniu ze zwykłymi skryptami w języku Python, użycie struktury poleceń zarządzania oznacza, że pewne żmudne prace instalacyjne są wykonywane automatycznie za kulisami.
Uwagi
Polecenia zarządzania można wywoływać z:
-
django-admin <command> [options]
-
python -m django <command> [options]
-
python manage.py <command> [options]
-
./manage.py <command> [options]
jeśli manage.py ma uprawnienia do wykonywania (chmod +x manage.py
)
Aby użyć poleceń zarządzania z Cronem:
*/10 * * * * pythonuser /var/www/dev/env/bin/python /var/www/dev/manage.py <command> [options] > /dev/null
Tworzenie i uruchamianie polecenia zarządzania
Aby wykonywać działania w Django przy użyciu wiersza polecenia lub innych usług (w których użytkownik / żądanie nie jest używany), możesz użyć management commands
.
Moduły Django można importować w razie potrzeby.
Dla każdej komendy należy utworzyć osobny plik: myapp/management/commands/my_command.py
(Katalogi management
i commands
muszą mieć pusty plik __init__.py)
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()
Tutaj nazwa klasy Command jest obowiązkowa, co rozszerza BaseCommand lub jedną z jego podklas.
Nazwa polecenia zarządzania to nazwa pliku zawierającego go. Aby uruchomić polecenie w powyższym przykładzie, użyj następujących w katalogu projektu:
python manage.py my_command
Pamiętaj, że uruchomienie polecenia może potrwać kilka sekund (z powodu importu modułów). Dlatego w niektórych przypadkach zaleca się tworzenie procesów
daemon
zamiastmanagement commands
.
Więcej na temat poleceń zarządzania
Uzyskaj listę istniejących poleceń
Listę dostępnych poleceń można uzyskać w następujący sposób:
>>> python manage.py help
Jeśli nie rozumiesz żadnego polecenia lub szukasz opcjonalnych argumentów, możesz użyć argumentu -h w ten sposób
>>> python manage.py command_name -h
Tutaj nazwa_ polecenia będzie twoją pożądaną nazwą polecenia, pokaże ci tekst pomocy z polecenia.
>>> 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.
Używanie django-admin zamiast manage.py
Możesz pozbyć się manage.py
i zamiast tego użyć komendy django-admin
. Aby to zrobić, musisz ręcznie zrobić to, co robi manage.py
:
- Dodaj ścieżkę projektu do PYTHONPATH
- Ustaw DJANGO_SETTINGS_MODULE
export PYTHONPATH="/home/me/path/to/your_project"
export DJANGO_SETTINGS_MODULE="your_project.settings"
Jest to szczególnie przydatne w virtualenv, w którym można ustawić te zmienne środowiskowe w skrypcie postactivate
.
Zaletą polecenia django-admin
jest to, że jest dostępny wszędzie tam, gdzie jest system plików.
Wbudowane polecenia zarządzania
Django zawiera szereg wbudowanych poleceń zarządzania, używając python manage.py [command]
lub, gdy manage.py ma + prawa (wykonywalne) po prostu ./manage.py [command]
. Oto niektóre z najczęściej używanych:
Uzyskaj listę wszystkich dostępnych poleceń
./manage.py help
Uruchom serwer Django na localhost: 8000; niezbędne do testów lokalnych
./manage.py runserver
Uruchom konsolę python (lub ipython, jeśli jest zainstalowany) z fabrycznie załadowanymi ustawieniami Django projektu (próba uzyskania dostępu do części projektu w terminalu python bez wykonania tej czynności zakończy się niepowodzeniem).
./manage.py shell
Utwórz nowy plik migracji bazy danych na podstawie zmian wprowadzonych w modelach. Zobacz migracje
./manage.py makemigrations
Zastosuj wszelkie niestosowane migracje do bieżącej bazy danych.
./manage.py migrate
Uruchom pakiet testowy swojego projektu. Zobacz Testowanie jednostek
./manage.py test
Weź wszystkie pliki statyczne swojego projektu i umieść je w folderze określonym w STATIC_ROOT
aby mogły być obsługiwane w produkcji.
./manage.py collectstatic
Pozwól na utworzenie superużytkownika.
./manage.py createsuperuser
Zmień hasło określonego użytkownika.
./manage.py changepassword username
Pełna lista dostępnych poleceń