Django
Команды управления
Поиск…
Вступление
Команды управления - это мощные и гибкие скрипты, которые могут выполнять действия в вашем проекте Django или в базе данных. В дополнение к различным командам по умолчанию можно писать самостоятельно!
По сравнению с обычными сценариями Python, использование фреймворка командной консоли означает, что некоторые утомительные работы по настройке автоматически выполняются для вас за кулисами.
замечания
Команды управления могут быть вызваны либо из:
-
django-admin <command> [options]
-
python -m django <command> [options]
-
python manage.py <command> [options]
-
./manage.py <command> [options]
если у manage.py есть разрешения на выполнение (chmod +x manage.py
)
Чтобы использовать команды управления с помощью Cron:
*/10 * * * * pythonuser /var/www/dev/env/bin/python /var/www/dev/manage.py <command> [options] > /dev/null
Создание и запуск команды управления
Для выполнения действий в Django с использованием командной строки или других служб (где пользователь / запрос не используется), вы можете использовать management commands
.
Модули Django могут быть импортированы по мере необходимости.
Для каждой команды необходимо создать отдельный файл: myapp/management/commands/my_command.py
(Каталоги management
и commands
должны иметь пустой файл __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()
Здесь обязателен класс name Command, который расширяет BaseCommand или один из его подклассов.
Имя команды управления - это имя файла, содержащего его. Чтобы запустить команду в приведенном выше примере, используйте следующую команду в каталоге проекта:
python manage.py my_command
Обратите внимание, что запуск команды может занять несколько секунд (из-за импорта модулей). Поэтому в некоторых случаях рекомендуется создавать процессы
daemon
вместоmanagement commands
.
Подробнее о командах управления
Получить список существующих команд
Вы можете получить список доступных команд следующим образом:
>>> python manage.py help
Если вы не понимаете какую-либо команду или ищете дополнительные аргументы, вы можете использовать аргумент -h, как это
>>> python manage.py command_name -h
Здесь command_name будет вашим именем команды желания, это покажет вам текст помощи из команды.
>>> 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.
Использование django-admin вместо manage.py
Вы можете избавиться от manage.py
и вместо этого использовать команду django-admin
. Для этого вам нужно вручную сделать то, что manage.py
делает:
- Добавьте свой путь к вашему PYTHONPATH
- Установите DJANGO_SETTINGS_MODULE
export PYTHONPATH="/home/me/path/to/your_project"
export DJANGO_SETTINGS_MODULE="your_project.settings"
Это особенно полезно в virtualenv, где вы можете установить эти переменные среды в сценарии postactivate
.
Преимущество команды django-admin
в том, что вы находитесь там, где находитесь в своей файловой системе.
Встроенные команды управления
Django поставляется с несколькими встроенными командами управления, используя python manage.py [command]
или, когда у manage.py есть + x (исполняемые) права просто ./manage.py [command]
. Ниже приведены некоторые из наиболее часто используемых:
Получить список всех доступных команд
./manage.py help
Запустите сервер Django на localhost: 8000; необходимо для локального тестирования
./manage.py runserver
Запустите консоль python (или ipython if installed) с предустановленными настройками Django вашего проекта (попытка получить доступ к частям вашего проекта на терминале python без этого не удастся).
./manage.py shell
Создайте новый файл миграции базы данных на основе изменений, внесенных вами в ваши модели. См. Миграции
./manage.py makemigrations
Примените любые непримененные миграции к текущей базе данных.
./manage.py migrate
Запустите тестовый пакет вашего проекта. См. Unit Testing
./manage.py test
Возьмите все статические файлы вашего проекта и STATIC_ROOT
их в папку, указанную в STATIC_ROOT
чтобы их можно было подавать на производство.
./manage.py collectstatic
Разрешить создание суперпользователя.
./manage.py createsuperuser
Измените пароль указанного пользователя.
./manage.py changepassword username
Полный список доступных команд