Поиск…


Вступление

Команды управления - это мощные и гибкие скрипты, которые могут выполнять действия в вашем проекте 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

Полный список доступных команд



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow