django-admin и manage.py
django-admin — утилита командной строки Django для административных задач. В этом документе описаны все её возможности.
Кроме того, manage.py автоматически создается в каждом проекте Django. Она выполняет те же действия, что и django-admin, но также устанавливает переменную среды DJANGO_SETTINGS_MODULE, чтобы она указывала на файл settings.py вашего проекта.
Скрипт django-admin должен быть в пути вашей системы, если вы установили Django через pip. Если его нет в пути, убедитесь, что активирована ваша виртуальная среда.
В целом, при работе с одним проектом Django проще использовать manage.py вместо django-admin. Если вам нужно переключаться между несколькими файлами настроек Django, используйте django-admin с DJANGO_SETTINGS_MODULE или опцией командной строки --settings.
В примерах командной строки в этом документе используется django-admin, но любой пример может использовать manage.py или python -m django с таким же успехом.
Использование
$ django-admin <command> [options] $ manage.py <command> [options] $ python -m django <command> [options]
...\> django-admin <command> [options]
...\> manage.py <command> [options]
...\> py -m django <command> [options]
command должно быть одной из команд, перечисленных в этом документе. options, которое является необязательным, должно содержать ноль или более опций, доступных для данной команды.
Получение справки во время выполнения
-
django-admin help
Запустите django-admin help для отображения информации об использовании и списка команд, предоставляемых каждой приложением.
Запустите django-admin help --commands для отображения списка всех доступных команд.
Запустите django-admin help <command> для отображения описания данной команды и списка доступных опций.
Имена приложений
Многие команды принимают список «имен приложений». «Имя приложения» — это имя базовой части пакета, содержащего ваши модели. Например, если ваш INSTALLED_APPS содержит строку 'mysite.blog', то имя приложения — blog.
Определение версии
-
django-admin version
Запустите django-admin version для отображения текущей версии Django.
Вывод соответствует схеме, описанной в PEP 440:
1.4.dev17026 1.4a1 1.4
Отображение отладочного вывода
Используйте --verbosity, где это поддерживается, для указания объема уведомлений и отладочной информации, которую django-admin выводит в консоль.
Доступные команды
check
-
django-admin check [app_label [app_label ...]]
Использует фреймворк проверки системы для проверки всего проекта Django на наличие распространённых проблем.
По умолчанию проверяются все приложения. Вы можете проверить подмножество приложений, указав список меток приложений в качестве аргументов:
django-admin check auth admin myapp
-
--tag TAGS, -t TAGS
Фреймворк проверки системы выполняет множество различных типов проверок, которые категоризируются по меткам. Вы можете использовать эти метки для ограничения выполняемых проверок только проверками в конкретной категории. Например, для выполнения только проверок моделей и совместимости запустите:
django-admin check --tag models --tag compatibility
-
--database DATABASE
Указывает базу данных для запуска проверок, требующих доступа к базе данных:
django-admin check --database default --database other
По умолчанию эти проверки не выполняются.
-
--list-tags
Выводит список всех доступных меток.
-
--deploy
Активирует дополнительные проверки, относящиеся только к среде развертывания.
Вы можете использовать эту опцию в вашей локальной среде разработки, но поскольку ваш модуль локальных настроек разработки может не содержать многих ваших настроек производства, вы, вероятно, захотите направить команду check на другой модуль настроек, либо задав переменную среды DJANGO_SETTINGS_MODULE, либо передав опцию --settings:
django-admin check --deploy --settings=production_settings
Или вы можете запустить его непосредственно в среде развертывания для производства или этапа тестирования для проверки правильности используемых настроек (опуская --settings). Вы даже можете сделать его частью вашей комплексной тестовой среды.
-
--fail-level {CRITICAL,ERROR,WARNING,INFO,DEBUG}
Указывает уровень сообщений, при котором команда завершится с ненулевым статусом. По умолчанию ERROR.
compilemessages
-
django-admin compilemessages
Компилирует файлы .po , созданные командой makemessages в файлы .mo для использования с встроенной поддержкой gettext. См. Международная локализация и локализация.
-
--locale LOCALE, -l LOCALE
Указывает локаль(и), которую нужно обработать. Если не указано, обрабатываются все локали.
-
--exclude EXCLUDE, -x EXCLUDE
Указывает локаль(и), которые нужно исключить из обработки. Если не указано, никакие локали не исключаются.
-
--use-fuzzy, -f
Включает недостоверные переводы в скомпилированные файлы.
Пример использования:
django-admin compilemessages --locale=pt_BR django-admin compilemessages --locale=pt_BR --locale=fr -f django-admin compilemessages -l pt_BR django-admin compilemessages -l pt_BR -l fr --use-fuzzy django-admin compilemessages --exclude=pt_BR django-admin compilemessages --exclude=pt_BR --exclude=fr django-admin compilemessages -x pt_BR django-admin compilemessages -x pt_BR -x fr
-
--ignore PATTERN, -i PATTERN
Игнорирует каталоги, соответствующие заданному шаблону в формате glob. Используйте несколько раз для игнорирования большего количества.
Пример использования:
django-admin compilemessages --ignore=cache --ignore=outdated/*/locale
createcachetable
-
django-admin createcachetable
Создает таблицы кеша для использования с кэшем базы данных, используя информацию из вашего файла настроек. Для получения дополнительной информации см. фреймворк кэша Django.
-
--database DATABASE
Указывает базу данных, в которой будут созданы таблицы кэша. По умолчанию default.
-
--dry-run
Выводит SQL, который будет запущен, но не выполняет его фактически, поэтому вы можете его настроить или использовать фреймворк миграций.
dbshell
-
django-admin dbshell
Запускает клиент командной строки для движка базы данных, указанного в настройке ENGINE, с параметрами подключения, указанными в ваших настройках USER, PASSWORD и т. д.
- Для PostgreSQL это запускает клиент командной строки
psql. - Для MySQL это запускает клиент командной строки
mysql. - Для SQLite это запускает клиент командной строки
sqlite3. - Для Oracle это запускает клиент командной строки
sqlplus.
Эта команда предполагает, что программы находятся в вашем системном пути, чтобы вызов имени программы (psql, mysql, sqlite3, sqlplus) находил программу в нужном месте. Нет возможности указать расположение программы вручную.
-
--database DATABASE
Указывает базу данных, для которой нужно открыть оболочку. По умолчанию default.
-
-- ARGUMENTS
Все аргументы после разделителя -- будут переданы в клиент командной строки. Например, с PostgreSQL вы можете использовать флаг psql команды -c для непосредственного выполнения запроса SQL:
$ django-admin dbshell -- -c 'select current_user' current_user -------------- postgres (1 row)
...\> django-admin dbshell -- -c 'select current_user'
current_user
--------------
postgres
(1 row)
В MySQL/MariaDB вы можете сделать это с помощью флага mysql команды -e:
$ django-admin dbshell -- -e "select user()" +----------------------+ | user() | +----------------------+ | djangonaut@localhost | +----------------------+
...\> django-admin dbshell -- -e "select user()"
+----------------------+
| user() |
+----------------------+
| djangonaut@localhost |
+----------------------+
Примечание
Обратите внимание, что не все опции, заданные в части OPTIONS вашей конфигурации базы данных в DATABASES, передаются клиенту командной строки, например, 'isolation_level'.
diffsettings
-
django-admin diffsettings
Отображает различия между текущим файлом настроек и стандартными настройками Django (или другим файлом настроек, указанным параметром --default).
Настройки, отсутствующие в стандартных, сопровождаются "###". Например, стандартные настройки не определяют ROOT_URLCONF, поэтому ROOT_URLCONF сопровождается "###" в выводе diffsettings.
-
--all
Отображает все настройки, даже если они имеют значение по умолчанию Django. Такие настройки предваряются "###".
-
--default MODULE
Модуль настроек для сравнения с текущими настройками. Оставьте пустым для сравнения со стандартными настройками Django.
-
--output {hash,unified}
Указывает формат вывода. Доступные значения — hash и unified. hash — это режим по умолчанию, отображающий вывод, описанный выше. unified отображает вывод, аналогичный diff -u. Стандартные настройки предваряются знаком минус, а изменённые — знаком плюс.
dumpdata
-
django-admin dumpdata [app_label[.ModelName] [app_label[.ModelName] ...]]
Выводит на стандартный вывод все данные в базе данных, связанные с указанными приложением(ями).
Если имя приложения не указано, будут выведены все установленные приложения.
Вывод dumpdata может быть использован в качестве входных данных для loaddata.
Обратите внимание, что dumpdata использует менеджер по умолчанию для модели при выборе записей для вывода. Если вы используете пользовательский менеджер в качестве менеджера по умолчанию и он фильтрует некоторые доступные записи, не все объекты будут выведены.
-
--all, -a
Использует базовый менеджер Django, выводя записи, которые в противном случае могут быть отфильтрованы или изменены пользовательским менеджером.
-
--format FORMAT
Указывает формат сериализации вывода. По умолчанию JSON. Поддерживаемые форматы перечислены в Форматы сериализации.
-
--indent INDENT
Указывает количество отступов для вывода. По умолчанию None, что отображает все данные в одной строке.
-
--exclude EXCLUDE, -e EXCLUDE
Препятствует выводу определённых приложений или моделей (указанных в формате app_label.ModelName). Если вы указываете имя модели, исключается только эта модель, а не всё приложение. Вы также можете смешивать имена приложений и модели.
Если вы хотите исключить несколько приложений, укажите --exclude более одного раза:
django-admin dumpdata --exclude=auth --exclude=contenttypes
-
--database DATABASE
Указывает базу данных, из которой будут выводиться данные. По умолчанию default.
-
--natural-foreign
Использует метод модели natural_key() для сериализации любого внешнего ключа и связи многие-ко-многим в объекты типа, который определяет этот метод. Если вы выгружаете contrib.auth Permission объекты или contrib.contenttypes ContentType объекты, вам, вероятно, следует использовать этот флаг. См. документацию естественные ключи для получения дополнительных сведений об этом и следующем параметре.
-
--natural-primary
Опускает первичный ключ в сериализованных данных этого объекта, поскольку он может быть вычислен во время десериализации.
-
--pks PRIMARY_KEYS
Выводит только объекты, указанные через запятую списком первичных ключей. Доступно только при выводе одной модели. По умолчанию выводятся все записи модели.
-
--output OUTPUT, -o OUTPUT
Указывает файл, в который будет записаны сериализованные данные. По умолчанию данные выводятся на стандартный вывод.
Когда этот параметр установлен, и --verbosity больше 0 (по умолчанию), в терминале отображается индикатор выполнения.
Сжатие фикстур
Файл вывода можно сжать в одном из форматов bz2, gz, lzma, или xz, добавив соответствующее расширение к имени файла. Например, чтобы вывести данные в сжатый файл JSON:
django-admin dumpdata -o mydata.json.gz
flush
-
django-admin flush
Удаляет все данные из базы данных и повторно выполняет все обработчики пост-синхронизации. Таблица применённых миграций не очищается.
Если вам нужно начать с пустой базы данных и перевыполнить все миграции, вам следует удалить и пересоздать базу данных, а затем запустить migrate.
-
--noinput, --no-input
Отключает все запросы пользователю.
-
--database DATABASE
Указывает базу данных для очистки. По умолчанию default.
inspectdb
-
django-admin inspectdb [table [table ...]]
Просматривает таблицы базы данных в базе данных, указанной настройкой NAME, и выводит модуль Django-модели (файл models.py ) на стандартный вывод.
Вы можете выбрать, какие таблицы или представления просмотреть, передав их имена в качестве аргументов. Если аргументы не указаны, модели создаются только для представлений, если используется опция --include-views. Модели для разбиений таблиц создаются в PostgreSQL, если используется опция --include-partitions.
Используйте этот инструмент, если у вас есть устаревшая база данных, с которой вы хотите использовать Django. Скрипт просмотрит базу данных и создаст модель для каждой таблицы в ней.
Как можно ожидать, созданные модели будут иметь атрибут для каждого поля в таблице. Обратите внимание, что inspectdb имеет несколько специальных случаев в выводе имени поля:
- Если
inspectdbне может сопоставить тип столбца с типом поля модели, он будет использоватьTextFieldи вставит Python-комментарий'This field type is a guess.'рядом с полем в сгенерированной модели. Распознаваемые поля могут зависеть от приложений, перечисленных вINSTALLED_APPS. Например,django.contrib.postgresдобавляет распознавание нескольких типов полей, специфичных для PostgreSQL. - Если имя столбца базы данных является зарезервированным словом Python (например,
'pass','class'или'for'),inspectdbдобавит'_field'к имени атрибута. Например, если таблица имеет столбец'for', сгенерированная модель будет иметь поле'for_field', с атрибутомdb_columnустановленным в'for'.inspectdbвставит Python-комментарий'Field renamed because it was a Python reserved word.'рядом с полем.
Эта функция предназначена в качестве быстрого решения, а не для окончательного создания модели. После её запуска вам нужно будет самостоятельно просмотреть сгенерированные модели, чтобы внести корректировки. В частности, вам необходимо переупорядочить модели, чтобы модели, которые ссылаются на другие модели, были упорядочены должным образом.
Django не создаёт значения по умолчанию в базе данных, когда для поля модели задано значение по умолчанию default. Аналогично, значения по умолчанию базы данных не переводятся в значения по умолчанию поля модели или каким-либо образом распознаются inspectdb.
По умолчанию inspectdb создаёт необработанные модели. То есть, managed = False в классе модели Meta сообщает Django, что не нужно управлять созданием, изменением и удалением каждой таблицы. Если вам нужно, чтобы Django управлял жизненным циклом таблицы, вам нужно изменить опцию managed на True (или убрать её, так как True — это её значение по умолчанию).
Примечания для различных баз данных
Oracle
- Модели создаются для материализованных представлений, если используется
--include-views.
PostgreSQL
- Модели создаются для внешних таблиц.
- Модели создаются для материализованных представлений, если используется
--include-views. - Модели создаются для разбиений таблиц, если используется
--include-partitions.
-
--database DATABASE
Указывает базу данных для инспектирования. По умолчанию default.
-
--include-partitions
Если этот параметр указан, модели также создаются для партиций.
Реализована только поддержка PostgreSQL.
-
--include-views
Если этот параметр указан, модели также создаются для представлений базы данных.
loaddata
-
django-admin loaddata fixture [fixture ...]
Ищет и загружает содержимое указанного файла фикстуры в базу данных.
-
--database DATABASE
Указывает базу данных, в которую будут загружены данные. По умолчанию default.
-
--ignorenonexistent, -i
Игнорирует поля и модели, которые могли быть удалены с момента первоначального создания фикстуры.
-
--app APP_LABEL
Указывает отдельное приложение для поиска фикстур, а не во всех приложениях.
-
--format FORMAT
Указывает формат сериализации (например, json или xml) для фикстур, считанных из стандартного ввода.
-
--exclude EXCLUDE, -e EXCLUDE
Исключает загрузку фикстур из указанных приложений и/или моделей (в формате app_label или app_label.ModelName). Используйте этот параметр несколько раз, чтобы исключить более одного приложения или модели.
Что такое «фикстура»?
Фикстура — это набор файлов, содержащих сериализованное содержимое базы данных. Каждая фикстура имеет уникальное имя, а файлы, составляющие фикстуру, могут быть распределены по нескольким каталогам и приложениям.
Django будет искать фикстуры в трёх местах:
- В каталоге
fixturesкаждого установленного приложения - В любом каталоге, указанном в настройке
FIXTURE_DIRS - По указанному пути фикстуры
Django загрузит все найденные фикстуры, соответствующие указанным именам.
Если у указанной фикстуры есть расширение файла, будут загружены только фикстуры этого типа. Например:
django-admin loaddata mydata.json
будут загружены только JSON-фикстуры с названием mydata. Расширение фикстуры должно соответствовать зарегистрированному имени сериализатора (например, json или xml).
Если вы опустите расширение, Django будет искать соответствующую фикстуру всех доступных типов. Например:
django-admin loaddata mydata
будет искать любую фикстуру любого типа с названием mydata. Если каталог фикстур содержал mydata.json, эта фикстура была бы загружена как JSON-фикстура.
Имена фикстур могут включать компоненты каталога. Эти каталоги будут включены в путь поиска. Например:
django-admin loaddata foo/bar/mydata.json
будет искать <app_label>/fixtures/foo/bar/mydata.json для каждого установленного приложения, <dirname>/foo/bar/mydata.json для каждого каталога в FIXTURE_DIRS, и буквальный путь foo/bar/mydata.json.
При обработке файлов фикстур данные сохраняются в базе данных как есть. Определённые в модели методы save() не вызываются, и любые сигналы pre_save или post_save будут вызваны с raw=True, так как экземпляр содержит только атрибуты, локальные для модели. Например, вы можете захотеть отключить обработчики, которые обращаются к связанным полям, отсутствующим во время загрузки фикстур и, в противном случае, вызывающим исключение:
from django.db.models.signals import post_save
from .models import MyModel
def my_handler(**kwargs):
# disable the handler during fixture loading
if kwargs['raw']:
return
...
post_save.connect(my_handler, sender=MyModel)
Вы также можете написать декоратор для инкапсуляции этой логики:
from functools import wraps
def disable_for_loaddata(signal_handler):
"""
Decorator that turns off signal handlers when loading fixture data.
"""
@wraps(signal_handler)
def wrapper(*args, **kwargs):
if kwargs['raw']:
return
signal_handler(*args, **kwargs)
return wrapper
@disable_for_loaddata
def my_handler(**kwargs):
...
Просто имейте в виду, что эта логика отключит сигналы всякий раз, когда фикстуры десериализуются, а не только при loaddata.
Обратите внимание, что порядок обработки файлов фикстур не определён. Однако все данные фикстур устанавливаются как единая транзакция, поэтому данные одной фикстуры могут ссылаться на данные другой фикстуры. Если бэкенд базы данных поддерживает ограничения на уровне строк, эти ограничения будут проверены в конце транзакции.
Команда dumpdata может использоваться для генерации входных данных для loaddata.
Сжатые фикстуры
Фикстуры могут быть сжаты в формате zip, gz, bz2, lzma, или xz. Например:
django-admin loaddata mydata.json
будет искать любую из mydata.json, mydata.json.zip, mydata.json.gz, mydata.json.bz2, mydata.json.lzma, или mydata.json.xz. Используется первый файл в сжатом архиве.
Обратите внимание, что если будут обнаружены две фикстуры с одинаковым именем, но разными типами фикстур (например, если mydata.json и mydata.xml.gz были найдены в одном каталоге фикстур), установка фикстуры будет прервана, и любые данные, установленные в вызове loaddata, будут удалены из базы данных.
MySQL с MyISAM и фикстурами
Двигатель хранения MyISAM MySQL не поддерживает транзакции или ограничения, поэтому при использовании MyISAM вы не получите валидации данных фикстуры или откат, если найдено несколько файлов транзакций.
Фикстуры, специфичные для базы данных
Если у вас настройка с несколькими базами данных, у вас могут быть данные фикстуры, которые вы хотите загрузить только в одну базу данных, а не в другую. В этой ситуации вы можете добавить идентификатор базы данных в имена ваших фикстур.
Например, если в настройке DATABASES определена база данных «users», назовите фикстуру mydata.users.json или mydata.users.json.gz, и фикстура будет загружена только при указании загрузки данных в базу данных users.
Загрузка фикстур из стандартного ввода
Вы можете использовать дефис в качестве имени фикстуры, чтобы загрузить входные данные из стандартного ввода. Например:
django-admin loaddata --format=json -
При чтении из стандартного ввода, необходим параметр --format для указания формата сериализации входных данных (например, json или xml).
Загрузка из стандартного ввода полезна при перенаправлении стандартного ввода и вывода. Например:
django-admin dumpdata --format=json --database=test app_label.ModelName | django-admin loaddata --format=json --database=prod -
makemessages
-
django-admin makemessages
Обрабатывает всю дерево каталогов текущего каталога и извлекает все строки, помеченные для перевода. Создаёт (или обновляет) файл сообщений в каталоге conf/locale (в дереве Django) или locale (для проекта и приложения). После внесения изменений в файлы сообщений необходимо скомпилировать их с помощью compilemessages для использования с встроенной поддержкой gettext. Подробности см. в документации i18n.
Эта команда не требует настроенных настроек. Однако при отсутствии настроек команда не может игнорировать каталоги MEDIA_ROOT и STATIC_ROOT или включать LOCALE_PATHS.
-
--all, -a
Обновляет файлы сообщений для всех доступных языков.
-
--extension EXTENSIONS, -e EXTENSIONS
Указывает список расширений файлов для проверки (по умолчанию: html, txt, py или js если --domain это js).
Пример использования:
django-admin makemessages --locale=de --extension xhtml
Разделяйте несколько расширений запятыми или используйте -e или --extension несколько раз:
django-admin makemessages --locale=de --extension=html,txt --extension xml
-
--locale LOCALE, -l LOCALE
Указывает языковой(ые) регион(ы) для обработки.
-
--exclude EXCLUDE, -x EXCLUDE
Указывает языковой(ые) регион(ы) для исключения из обработки. Если не указано, языковые регионы не исключаются.
Пример использования:
django-admin makemessages --locale=pt_BR django-admin makemessages --locale=pt_BR --locale=fr django-admin makemessages -l pt_BR django-admin makemessages -l pt_BR -l fr django-admin makemessages --exclude=pt_BR django-admin makemessages --exclude=pt_BR --exclude=fr django-admin makemessages -x pt_BR django-admin makemessages -x pt_BR -x fr
-
--domain DOMAIN, -d DOMAIN
Указывает домен файлов сообщений. Доступные варианты:
-
djangoдля всех файлов*.py,*.htmlи*.txt(по умолчанию) -
djangojsдля файлов*.js
-
--symlinks, -s
Следует за символическими ссылками на каталоги при поиске новых строк перевода.
Пример использования:
django-admin makemessages --locale=de --symlinks
-
--ignore PATTERN, -i PATTERN
Игнорирует файлы или каталоги, соответствующие заданному шаблону в стиле glob. Используйте несколько раз для игнорирования большего количества элементов.
Эти шаблоны используются по умолчанию: 'CVS', '.*', '*~', '*.pyc'.
Пример использования:
django-admin makemessages --locale=en_US --ignore=apps/* --ignore=secret/*.html
-
--no-default-ignore
Отключает значения по умолчанию для --ignore.
-
--no-wrap
Отключает разбиение длинных строк сообщений на несколько строк в файлах языка.
-
--no-location
Запрещает запись комментариев «#: filename:line» в файлы языка. Использование этого параметра затрудняет техническим переводчикам понимание контекста каждого сообщения.
-
--add-location [{full,file,never}]
Управляет комментариями #: filename:line в файлах языка. Если параметр:
-
full(значение по умолчанию, если не указано): строки включают имя файла и номер строки. -
file: номер строки опускается. -
never: строки подавляются (то же, что и--no-location).
Требует gettext 0.19 или новее.
-
--keep-pot
Предотвращает удаление временных файлов .pot, созданных перед созданием файла .po. Это полезно для отладки ошибок, которые могут помешать созданию окончательных файлов языка.
См. также
См. Настройка команды makemessages для получения инструкций по настройке ключевых слов, которые makemessages передает xgettext.
makemigrations
-
django-admin makemigrations [app_label [app_label ...]]
Создаёт новые миграции на основе изменений, обнаруженных в ваших моделях. Миграции, их отношения с приложениями и многое другое подробно описаны в документации по миграциям.
Указание одного или нескольких имён приложений в качестве аргументов ограничит созданные миграции указанными приложениями и любыми необходимыми зависимостями (например, таблицей на другом конце ForeignKey).
Чтобы добавить миграции в приложение, у которого нет каталога migrations, запустите makemigrations с именем app_label приложения.
-
--noinput, --no-input
Подавляет все запросы пользователю. Если подавленный запрос нельзя решить автоматически, команда завершится с кодом ошибки 3.
-
--empty
Выводит пустую миграцию для указанных приложений для ручного редактирования. Это предназначено для продвинутых пользователей и не должно использоваться, если вы не знакомы с форматом миграции, операциями миграции и зависимостями между вашими миграциями.
-
--dry-run
Показывает, какие миграции будут созданы, без фактического записи каких-либо файлов миграции на диск. Использование этого параметра вместе с --verbosity 3 также покажет полные файлы миграций, которые будут записаны.
-
--merge
Включает исправление конфликтов миграций.
-
--name NAME, -n NAME
Позволяет назначить имя сгенерированной(ых) миграции(ей) вместо использования сгенерированного имени. Имя должно быть допустимым идентификатором Python идентификатором.
-
--no-header
Генерировать файлы миграций без версии Django и метки времени в заголовке.
-
--check
Заставляет makemigrations завершаться с ненулевым статусом при обнаружении изменений модели без миграций.
-
--scriptable
Перенаправляет вывод журнала и запросы ввода в stderr, записывая только пути сгенерированных файлов миграций в stdout.
migrate
-
django-admin migrate [app_label] [migration_name]
Синхронизирует состояние базы данных с текущим набором моделей и миграций. Миграции, их отношения с приложениями и многое другое подробно описаны в документации по миграциям.
Поведение этой команды меняется в зависимости от предоставленных аргументов:
- Без аргументов: выполняются все миграции всех приложений.
-
<app_label>: выполняются миграции указанного приложения до самой последней миграции. Это может также включать выполнение миграций других приложений из-за зависимостей. -
<app_label> <migrationname>: приводит схему базы данных в состояние, где применена указанная миграция, но последующие миграции в том же приложении не применяются. Это может включать отмену миграций, если вы ранее мигрировали за указанной миграцией. Вы можете использовать префикс имени миграции, например0001, при условии, что он уникален для данного имени приложения. Используйте имяzeroдля возврата ко всем применённым миграциям для приложения.
Предупреждение
При отмене миграций все зависимые миграции также будут отменены, независимо от <app_label>. Вы можете использовать --plan для проверки, какие миграции будут отменены.
-
--database DATABASE
Указывает базу данных для миграции. По умолчанию default.
-
--fake
Помечает миграции до целевой (следуя правилам выше) как применённые, но без фактического выполнения SQL для изменения схемы вашей базы данных.
Это предназначено для продвинутых пользователей для непосредственного управления текущим состоянием миграции, если они вручную применяют изменения; будьте осторожны, так как использование --fake несёт риск размещения таблицы состояния миграции в состоянии, где потребуется ручная реставрация, чтобы миграции запустились правильно.
-
--fake-initial
Разрешает Django пропустить начальную миграцию приложения, если все таблицы базы данных с именами всех моделей, созданных всеми операциями CreateModel в этой миграции, уже существуют. Этот параметр предназначен для использования при первом запуске миграций в базе данных, существовавшей до использования миграций. Этот параметр, однако, не проверяет соответствие схемы базы данных, кроме совпадения имён таблиц, и поэтому безопасен только для использования, если вы уверены, что ваша существующая схема соответствует тому, что записано в вашей начальной миграции.
-
--plan
Показывает операции миграции, которые будут выполнены для данной команды migrate.
-
--run-syncdb
Позволяет создавать таблицы для приложений без миграций. Хотя это не рекомендуется, для больших проектов сотнями моделей миграционная система иногда работает слишком медленно.
-
--noinput, --no-input
Подавляет все запросы пользователю. Примером такого запроса является запрос об удалении устаревших типов содержимого.
-
--check
Заставляет migrate завершаться с ненулевым статусом при обнаружении неприменённых миграций.
-
--prune
Удаляет несуществующие миграции из таблицы django_migrations. Это полезно, когда файлы миграции, заменённые склеенной миграцией, были удалены. Подробнее см. Сжатие миграций.
optimizemigration
-
django-admin optimizemigration app_label migration_name
Оптимизирует операции для указанной миграции и перезаписывает существующий файл. Если миграция содержит функции, которые необходимо вручную скопировать, команда создаёт новый файл миграции с суффиксом _optimized, который предназначен для замены указанной миграции.
-
--check
Заставляет optimizemigration завершиться с ненулевым статусом, когда миграцию можно оптимизировать.
runserver
-
django-admin runserver [addrport]
Запускает лёгкий веб-сервер разработки на локальной машине. По умолчанию сервер работает на порту 8000 по IP-адресу 127.0.0.1. Вы можете явно указать IP-адрес и номер порта.
Если вы запускаете этот скрипт от пользователя с обычными привилегиями (рекомендуется), у вас может не быть доступа к запуску порта на низком номере. Низкие номера портов зарезервированы для суперпользователя (root).
Этот сервер использует объект WSGI-приложения, указанный настройкой WSGI_APPLICATION.
НЕ ИСПОЛЬЗУЙТЕ ЭТОТ СЕРВЕР В ПРОИЗВОДСТВЕННОЙ СРЕДЕ. Он не прошёл аудит безопасности или тестирование производительности. (И так будет оставаться. Мы занимаемся разработкой веб-фреймворков, а не веб-серверов, поэтому улучшение этого сервера для обработки производственной среды выходит за рамки Django.)
Сервер разработки автоматически перезагружает код Python для каждого запроса по мере необходимости. Вам не нужно перезапускать сервер для применения изменений в коде. Однако некоторые действия, такие как добавление файлов, не запускают перезагрузку, поэтому в этих случаях придётся перезапустить сервер.
Если вы используете Linux или MacOS и установили как pywatchman, так и службу Watchman, для автоматической перезагрузки сервера будут использоваться сигналы ядра (вместо опроса времени изменения файлов каждую секунду). Это обеспечивает лучшую производительность для крупных проектов, сокращает время отклика после изменений в коде, более надёжное обнаружение изменений и снижение энергопотребления. Django поддерживает pywatchman 1.2.0 и выше.
Директории с большим количеством файлов могут вызвать проблемы с производительностью
При использовании Watchman с проектом, содержащим большие не-Python директории, такие как node_modules, для оптимальной производительности рекомендуется проигнорировать эту директорию. Обратитесь к документации Watchman за информацией о том, как это сделать.
Таймаут Watchman
-
DJANGO_WATCHMAN_TIMEOUT
По умолчанию таймаут клиента Watchman составляет 5 секунд. Вы можете изменить его, установив переменную среды DJANGO_WATCHMAN_TIMEOUT.
При запуске сервера и каждом изменении кода Python во время работы сервера, система проверит весь ваш проект Django на наличие распространённых ошибок (см. команду check). Если будут обнаружены ошибки, они будут выведены в стандартный вывод. Вы можете использовать опцию --skip-checks для пропуска выполнения системных проверок.
Вы можете запускать любое количество конкурирующих серверов, при условии, что они работают на разных портах, выполнив django-admin runserver более одного раза.
Обратите внимание, что по умолчанию IP-адрес 127.0.0.1 недоступен с других машин в вашей сети. Чтобы сделать ваш сервер разработки доступным для других машин в сети, используйте собственный IP-адрес (например, 192.168.2.1) или 0.0.0.0 или :: (с поддержкой IPv6).
Вы можете указать IPv6-адрес в скобках (например, [200a::1]:8000). Это автоматически включит поддержку IPv6.
Можно также использовать имя хоста, содержащее только символы ASCII.
Если приложение staticfiles contrib включено (по умолчанию в новых проектах), команда runserver будет переопределена собственной командой runserver.
Логирование каждого запроса и ответа сервера отправляется в логгер django.server.
-
--noreload
Отключает автоперезагрузчик. Это означает, что любые изменения в коде Python, внесённые вами во время работы сервера, не будут применены, если соответствующие модули Python уже загружены в память.
-
--nothreading
Отключает использование многопоточности на сервере разработки. Сервер по умолчанию многопоточный.
-
--ipv6, -6
Использует IPv6 для сервера разработки. Это изменяет IP-адрес по умолчанию с 127.0.0.1 на ::1.
Была добавлена поддержка опции --skip-checks.
Примеры использования различных портов и адресов
Порт 8000 по IP-адресу 127.0.0.1:
django-admin runserver
Порт 8000 по IP-адресу 1.2.3.4:
django-admin runserver 1.2.3.4:8000
Порт 7000 по IP-адресу 127.0.0.1:
django-admin runserver 7000
Порт 7000 по IP-адресу 1.2.3.4:
django-admin runserver 1.2.3.4:7000
Порт 8000 по IPv6-адресу ::1:
django-admin runserver -6
Порт 7000 по IPv6-адресу ::1:
django-admin runserver -6 7000
Порт 7000 по IPv6-адресу 2001:0db8:1234:5678::9:
django-admin runserver [2001:0db8:1234:5678::9]:7000
Порт 8000 по IPv4-адресу хоста localhost:
django-admin runserver localhost:8000
Порт 8000 по IPv6-адресу хоста localhost:
django-admin runserver -6 localhost:8000
Сервирование статических файлов с сервером разработки
По умолчанию сервер разработки не предоставляет статические файлы вашего сайта (например, файлы CSS, изображения, элементы под MEDIA_URL и так далее). Если вы хотите настроить Django для предоставления статических медиа-файлов, прочитайте Как управлять статическими файлами (например, изображениями, JavaScript, CSS).
sendtestemail
-
django-admin sendtestemail [email [email ...]]
Отправляет тестовое письмо (для подтверждения работы отправки писем через Django) указанному получателю(ям). Например:
django-admin sendtestemail foo@example.com bar@example.com
Есть несколько опций, и вы можете использовать любое их сочетание:
-
--managers
Отправляет письмо на адреса, указанные в MANAGERS, используя mail_managers().
-
--admins
Отправляет письмо на адреса, указанные в ADMINS, используя mail_admins().
shell
-
django-admin shell
Запускает интерактивный интерпретатор Python.
-
--interface {ipython,bpython,python}, -i {ipython,bpython,python}
Указывает оболочку для использования. По умолчанию Django будет использовать IPython или bpython, если любой из них установлен. Если оба установлены, укажите, какой из них вы хотите использовать, например:
IPython:
django-admin shell -i ipython
bpython:
django-admin shell -i bpython
Если у вас установлена «оболочка» shell, но вы хотите принудительно использовать интерпретатор Python, используйте python в качестве имени интерфейса, например:
django-admin shell -i python
-
--nostartup
Отключает чтение скрипта запуска для интерпретатора Python. По умолчанию читается скрипт, указанный переменной среды PYTHONSTARTUP или скрипт ~/.pythonrc.py.
-
--command COMMAND, -c COMMAND
Позволяет передать команду как строку для её выполнения в Django, например:
django-admin shell --command="import django; print(django.__version__)"
Вы также можете передать код в стандартный ввод для его выполнения. Например:
$ django-admin shell <<EOF > import django > print(django.__version__) > EOF
В Windows REPL выводится из-за ограничений реализации select.select() на этой платформе.
showmigrations
-
django-admin showmigrations [app_label [app_label ...]]
Отображает все миграции в проекте. Вы можете выбрать один из двух форматов:
-
--list, -l
Отображает все известные Django приложения, доступные миграции для каждого приложения и применённые ли миграции (отмечено [X] рядом с именем миграции). Для версии --verbosity 2 и выше также отображаются даты и время применения.
Приложения без миграций также отображаются, но под ними отображается (no migrations).
Это формат вывода по умолчанию.
-
--plan, -p
Показывает план миграции, который Django будет использовать для применения миграций. Как --list, применённые миграции помечены [X]. Для версии --verbosity 2 и выше также будут показаны все зависимости миграции.
app_label аргументы ограничивают вывод, однако также могут быть включены зависимости указанных приложений.
-
--database DATABASE
Указывает базу данных для проверки. По умолчанию default.
sqlflush
-
django-admin sqlflush
Выводит SQL-запросы, которые будут выполнены для команды flush.
-
--database DATABASE
Указывает базу данных, для которой необходимо вывести SQL. По умолчанию default.
sqlmigrate
-
django-admin sqlmigrate app_label migration_name
Выводит SQL для указанной миграции. Это требует активного подключения к базе данных, которое используется для разрешения имён ограничений; это означает, что вы должны сгенерировать SQL относительно копии базы данных, на которой вы хотите его позже применить.
Обратите внимание, что sqlmigrate не форматирует вывод цветом.
-
--backwards
Генерирует SQL для отмены миграции. По умолчанию создаваемый SQL предназначен для выполнения миграции в прямом направлении.
-
--database DATABASE
Указывает базу данных, для которой необходимо сгенерировать SQL. По умолчанию default.
sqlsequencereset
-
django-admin sqlsequencereset app_label [app_label ...]
Выводит SQL-запросы для сброса последовательностей для указанных имён приложения(й).
Последовательности — это индексы, используемые некоторыми базами данных для отслеживания следующего доступного числа для автоматически инкрементируемых полей.
Используйте эту команду для генерации SQL, который исправит случаи, когда последовательность не синхронизирована с данными автоматически инкрементируемого поля.
-
--database DATABASE
Указывает базу данных, для которой необходимо вывести SQL. По умолчанию default.
squashmigrations
-
django-admin squashmigrations app_label [start_migration_name] migration_name
Сжимает миграции для app_label до и включая migration_name вниз до меньшего количества миграций, если это возможно. Результирующие сжатые миграции могут безопасно существовать вместе с несжатыми. Для получения дополнительной информации, пожалуйста, прочитайте Сжатие миграций.
Если указано start_migration_name, Django включит только миграции, начиная с и включая эту миграцию. Это помогает смягчить ограничение сжатия для миграций RunPython и django.db.migrations.operations.RunSQL.
-
--no-optimize
Отключает оптимизатор при генерации сжатой миграции. По умолчанию Django попытается оптимизировать операции в ваших миграциях, чтобы уменьшить размер результирующего файла. Используйте этот параметр, если этот процесс завершается неудачно или создаёт некорректные миграции, хотя, пожалуйста, также отправьте отчёт об ошибке Django о поведении, так как оптимизация предназначена для безопасности.
-
--noinput, --no-input
Отключает все запросы пользователю.
-
--squashed-name SQUASHED_NAME
Устанавливает имя сжатой миграции. Если опущено, имя основано на первой и последней миграции, со _squashed_ между ними.
-
--no-header
Генерирует файл сжатой миграции без заголовка с версией Django и отметкой времени.
startapp
-
django-admin startapp name [directory]
Создаёт структуру директорий приложения Django для указанного имени приложения в текущем каталоге или в указанном месте назначения.
По умолчанию, новый каталог содержит файл models.py и другие файлы шаблона приложения. Если указано только имя приложения, каталог приложения будет создан в текущей рабочей директории.
Если указан необязательный путь к месту назначения, Django использует этот существующий каталог вместо создания нового. Вы можете использовать «.» для обозначения текущей рабочей директории.
Например:
django-admin startapp myapp /Users/jezdez/Code/myapp
-
--template TEMPLATE
Указывает путь к каталогу с пользовательским файлом шаблона приложения или пути к нераспакованному архиву (.tar) или сжатому архиву (.tar.gz, .tar.bz2, .tar.xz, .tar.lzma, .tgz, .tbz2, .txz, .tlz, .zip) содержащим файлы шаблона приложения.
Например, это позволит найти шаблон приложения в указанном каталоге при создании приложения myapp:
django-admin startapp --template=/Users/jezdez/Code/my_app_template myapp
Django также принимает URL (http, https, ftp) для сжатых архивов с файлами шаблона приложения, загружая и извлекая их на лету.
Например, используя возможность GitHub по отображению репозиториев в виде zip-файлов, вы можете использовать URL, подобный:
django-admin startapp --template=https://github.com/githubuser/django-app-template/archive/main.zip myapp
-
--extension EXTENSIONS, -e EXTENSIONS
Указывает расширения файлов в шаблоне приложения, которые должны быть рендерированы с помощью движка шаблонов. По умолчанию py.
-
--name FILES, -n FILES
Указывает файлы в шаблоне приложения (кроме тех, которые соответствуют --extension), которые должны быть рендерированы с помощью движка шаблонов. По умолчанию пустой список.
-
--exclude DIRECTORIES, -x DIRECTORIES
Указывает каталоги в шаблоне приложения, которые следует исключить, в дополнение к .git и __pycache__. Если этот параметр не указан, будут исключены каталоги с именем __pycache__ или начинающиеся с ..
Контекст template context, используемый для всех соответствующих файлов:
- Любой параметр, переданный команде
startapp(среди поддерживаемых параметров команды) -
app_name– имя приложения, переданное команде -
app_directory– полный путь к новосозданному приложению -
camel_case_app_name– имя приложения в формате с заглавной буквы -
docs_version– версия документации:'dev'или'1.x' -
django_version– версия Django, например'2.0.3'
Предупреждение
Когда файлы шаблона приложения рендерятся с помощью движка шаблонов Django (по умолчанию все *.py файлы), Django также заменяет все случайные переменные шаблона. Например, если один из Python-файлов содержит строку документации, объясняющую конкретную функцию, связанную с рендерингом шаблона, это может привести к неверному примеру.
Чтобы обойти эту проблему, вы можете использовать тег шаблона templatetag для «экранирования» различных частей синтаксиса шаблона.
Кроме того, для того, чтобы разрешить файлы шаблонов Python, содержащие синтаксис Django шаблонов, одновременно предотвращая попытки систем упаковки выполнить байт-компиляцию недопустимых *.py файлов, файлы шаблонов, заканчивающиеся на .py-tpl будут переименованы в .py.
startproject
-
django-admin startproject name [directory]
Создаёт структуру директорий проекта Django для заданного имени проекта в текущем каталоге или в указанном месте назначения.
По умолчанию, новый каталог содержит manage.py и пакет проекта (содержащий settings.py и другие файлы).
Если указано только имя проекта, как каталог проекта, так и пакет проекта будут названы <projectname>, и каталог проекта будет создан в текущей рабочей директории.
Если указан необязательный путь к месту назначения, Django будет использовать этот существующий каталог в качестве каталога проекта и создаст manage.py и пакет проекта внутри него. Используйте «.» для обозначения текущей рабочей директории.
Например:
django-admin startproject myproject /Users/jezdez/Code/myproject_repo
-
--template TEMPLATE
Указывает каталог, путь к файлу или URL-адрес пользовательского шаблона проекта. См. документацию startapp --template для примеров и использования.
-
--extension EXTENSIONS, -e EXTENSIONS
Указывает расширения файлов в шаблоне проекта, которые должны быть рендерированы с помощью движка шаблонов. По умолчанию py.
-
--name FILES, -n FILES
Указывает, какие файлы в шаблоне проекта (кроме тех, которые соответствуют --extension) должны быть рендерированы с помощью движка шаблонов. По умолчанию пустой список.
-
--exclude DIRECTORIES, -x DIRECTORIES
Указывает, какие каталоги в шаблоне проекта следует исключить, помимо .git и __pycache__. Если этот параметр не указан, будут исключены каталоги с именем __pycache__ или начинающиеся с ..
Используемый template context:
- Любой параметр, переданный команде
startproject(среди поддерживаемых параметров команды) -
project_name– имя проекта, переданное команде -
project_directory– полный путь к новосозданному проекту -
secret_key– случайный ключ для настройкиSECRET_KEY -
docs_version– версия документации:'dev'или'1.x' -
django_version– версия Django, например'2.0.3'
Также см. предупреждение о рендеринге, упомянутое для startapp.
test
-
django-admin test [test_label [test_label ...]]
Запускает тесты для всех установленных приложений. Подробнее см. Тестирование в Django.
-
--failfast
Останавливает выполнение тестов и сообщает об ошибке сразу после ее обнаружения.
-
--testrunner TESTRUNNER
Управляет классом исполнителя тестов, используемым для выполнения тестов. Это значение переопределяет значение, заданное настройкой TEST_RUNNER.
-
--noinput, --no-input
Отключает все запросы пользователю. Типичный запрос — предупреждение об удалении существующей тестовой базы данных.
Параметры исполнителя тестов
Команда test получает параметры от имени указанного --testrunner. Это параметры по умолчанию для исполнителя тестов: DiscoverRunner.
-
--keepdb
Сохраняет тестовую базу данных между запусками тестов. Это дает преимущество пропуска действий создания и удаления, что значительно сокращает время выполнения тестов, особенно в больших наборах тестов. Если тестовой базы данных не существует, она будет создана при первом запуске и сохранена для каждого последующего запуска. Если настройка теста MIGRATE не False, все невыполненные миграции также будут применены к тестовой базе данных перед запуском набора тестов.
-
--shuffle [SEED]
Случайным образом меняет порядок тестов перед их запуском. Это может помочь обнаружить тесты, которые не изолированы должным образом. Порядок тестов, сгенерированный этим параметром, — детерминированная функция целого числа, заданного в качестве параметра. Если семя не указано, выбирается случайное семя и выводится на консоль. Чтобы повторить конкретный порядок тестов, передайте семя. Сгенерированные этим параметром порядки тестов сохраняют гарантии Django на порядок тестов. Они также сохраняют группы тестов по классам.
Перемешанные упорядочивания также обладают особым свойством согласованности, полезным при сужении изоляционных проблем. А именно, для заданного семени и при запуске подмножества тестов новый порядок будет исходным перемешиванием, ограниченным меньшим набором. Аналогично, при добавлении тестов при сохранении одного семени порядок исходных тестов останется неизменным в новом порядке.
-
--reverse, -r
Сортирует тестовые случаи в обратном порядке выполнения. Это может помочь в отладке побочных эффектов тестов, которые не изолированы должным образом. Группировка по тестовым классам сохраняется при использовании этого параметра. Его можно использовать в сочетании с --shuffle для изменения порядка для определенного семени.
-
--debug-mode
Устанавливает настройку DEBUG в True перед запуском тестов. Это может помочь в устранении неполадок в тестах.
-
--debug-sql, -d
Включает журналирование SQL для тестов, которые завершились ошибкой. Если --verbosity — 2, запросы в проходящих тестах также выводятся.
-
--parallel [N]
-
DJANGO_TEST_PROCESSES
Запускает тесты в отдельных параллельных процессах. Поскольку современные процессоры имеют несколько ядер, это позволяет значительно ускорить выполнение тестов.
Использование --parallel без значения или со значением auto запускает один процесс теста на ядро в соответствии с multiprocessing.cpu_count(). Вы можете переопределить это, передав нужное количество процессов, например, --parallel 4, или установив переменную среды DJANGO_TEST_PROCESSES.
Django распределяет тестовые случаи — подклассы unittest.TestCase — в дочерние процессы. Если тестовых случаев меньше, чем настроенных процессов, Django уменьшит количество процессов соответственно.
Каждый процесс получает собственную базу данных. Вы должны убедиться, что разные тестовые случаи не обращаются к одним и тем же ресурсам. Например, тестовые случаи, которые взаимодействуют с файловой системой, должны создавать временную директорию для собственного использования.
Примечание
Если у вас есть тестовые классы, которые нельзя запустить параллельно, вы можете использовать SerializeMixin для их последовательного запуска. См. Принудительное выполнение тестовых классов последовательно.
Для корректного отображения трассировок этого параметра требуется пакет tblib сторонних разработчиков:
$ python -m pip install tblib
Эта функция недоступна в Windows. Она также не работает с бэкэндом базы данных Oracle.
Если вы хотите использовать pdb при отладке тестов, вы должны отключить параллельное выполнение (--parallel=1). Если этого не сделать, вы увидите что-то вроде bdb.BdbQuit.
Предупреждение
Когда включена параллелизация тестов, и тест завершается с ошибкой, Django может не отобразить трассировку исключения. Это может затруднить отладку. Если у вас возникла эта проблема, запустите затронутый тест без параллелизации, чтобы увидеть трассировку ошибки.
Это известное ограничение. Оно возникает из-за необходимости сериализации объектов для обмена между процессами. Подробнее см. Что можно сериализовать и десериализовать?
Добавлена поддержка значения auto.
-
--tag TAGS
Запускает только те тесты, которые помечены указанными тегами. Можно указать несколько раз и комбинировать с test --exclude-tag.
Тесты, которые не загрузились, всегда считаются соответствующими.
В более ранних версиях тесты, которые не загружались, не соответствовали тегам.
-
--exclude-tag EXCLUDE_TAGS
Исключает тесты помеченные указанными тегами. Можно указать несколько раз и комбинировать с test --tag.
-
-k TEST_NAME_PATTERNS
Запускает тестовые методы и классы, соответствующие шаблонам имен тестов, аналогично unittest's -k option. Можно указать несколько раз.
-
--pdb
Запускает отладчик pdb при каждой ошибке или сбое теста. Если он установлен, вместо него используется ipdb.
-
--buffer, -b
Отбрасывает вывод (stdout и stderr) для прохождения тестов аналогично unittest's --buffer option.
-
--no-faulthandler
Django автоматически вызывает faulthandler.enable() при запуске тестов, что позволяет выводить трассировку стека при аварийном завершении интерпретатора. Используйте --no-faulthandler для отключения этого поведения.
-
--timing
Выводит время выполнения, включая настройку базы данных и общее время выполнения.
testserver
-
django-admin testserver [fixture [fixture ...]]
Запускает сервер разработки Django (как в runserver) с данными из заданного(ых) файла(ов) фикстур.
Например, эта команда:
django-admin testserver mydata.json
…выполнит следующие шаги:
- Создает тестовую базу данных, как описано в тестовой базе данных.
- Заполняет тестовую базу данными фикстур из заданных файлов фикстур. (Подробнее о фикстурах см. в документации к
loaddataвыше.) - Запускает сервер разработки Django (как в
runserver), направленный на эту вновь созданную тестовую базу данных вместо вашей рабочей базы данных.
Это полезно в ряде случаев:
- При написании юнит-тестов того, как ваши представления взаимодействуют с определенными данными фикстур, вы можете использовать
testserverдля взаимодействия с представлениями в веб-браузере вручную. - Допустим, вы разрабатываете своё приложение Django и имеете «чистую» копию базы данных, с которой хотите взаимодействовать. Вы можете сохранить вашу базу данных в файл фикстур (используя команду
dumpdata, описанную выше), а затем использоватьtestserverдля запуска вашего веб-приложения с этими данными. С таким подходом у вас есть гибкость, чтобы изменять данные любым способом, зная, что все изменения данных происходят только в тестовой базе данных.
Обратите внимание, что этот сервер не автоматически обнаруживает изменения в исходном коде Python (как runserver), однако он обнаруживает изменения в шаблонах.
-
--addrport ADDRPORT
Указывает другой порт или IP-адрес и порт, отличные от значения по умолчанию 127.0.0.1:8000. Это значение имеет точно такой же формат и выполняет точно такую же функцию, как аргумент команды runserver.
Примеры:
Запуск тестового сервера на порте 7000 с fixture1 и fixture2:
django-admin testserver --addrport 7000 fixture1 fixture2 django-admin testserver fixture1 fixture2 --addrport 7000
(Вышеприведённые утверждения эквивалентны. Мы включаем оба из них, чтобы продемонстрировать, что порядок опций перед или после аргументов фикстур не имеет значения.)
Запуск на 1.2.3.4:7000 с test фикстурой:
django-admin testserver --addrport 1.2.3.4:7000 test
-
--noinput, --no-input
Отключает все запросы к пользователю. Типичный запрос — предупреждение об удалении существующей тестовой базы данных.
Команды, предоставляемые приложениями
Некоторые команды доступны только тогда, когда приложение django.contrib , реализующее их, было enabled. Этот раздел описывает их, сгруппированные по приложениям.
django.contrib.auth
changepassword
-
django-admin changepassword [<username>]
Эта команда доступна только в том случае, если система аутентификации Django (django.contrib.auth) установлена.
Позволяет изменить пароль пользователя. Она запрашивает у вас дважды новый пароль для данного пользователя. Если введенные пароли совпадают, они сразу же становятся новым паролем. Если вы не укажете пользователя, команда попытается изменить пароль пользователя с именем, соответствующим текущему пользователю.
-
--database DATABASE
Указывает базу данных для запроса пользователя. По умолчанию default.
Пример использования:
django-admin changepassword ringo
createsuperuser
-
django-admin createsuperuser
-
DJANGO_SUPERUSER_PASSWORD
Эта команда доступна только в том случае, если система аутентификации Django (django.contrib.auth) установлена.
Создаёт учётную запись суперпользователя (пользователь со всеми правами). Это полезно, если вам нужно создать начальную учётную запись суперпользователя или если вам нужно программно генерировать учётные записи суперпользователей для вашего сайта(ов).
При интерактивном запуске эта команда запросит пароль для новой учётной записи суперпользователя. При неинтерактивном запуске вы можете предоставить пароль, установив переменную окружения DJANGO_SUPERUSER_PASSWORD. В противном случае пароль не будет установлен, и суперпользователь не сможет войти до тех пор, пока пароль не будет задан вручную.
В неинтерактивном режиме USERNAME_FIELD и необходимые поля (перечисленные в REQUIRED_FIELDS) используют переменные окружения DJANGO_SUPERUSER_<uppercase_field_name>, если они не переопределены аргументом командной строки. Например, чтобы предоставить поле email, вы можете использовать переменную окружения DJANGO_SUPERUSER_EMAIL.
-
--noinput, --no-input
Отключает все запросы к пользователю. Если запрос не может быть автоматически решён, команда завершится с кодом ошибки 1.
-
--username USERNAME
-
--email EMAIL
Имя пользователя и адрес электронной почты для новой учётной записи могут быть предоставлены с помощью аргументов --username и --email в командной строке. Если ни один из них не указан, createsuperuser запросит их при интерактивном запуске.
-
--database DATABASE
Указывает базу данных, в которую будет сохранён объект суперпользователя.
Вы можете наследоваться от команды управления и переопределить get_input_data(), если хотите настроить ввод и валидацию данных. Обратитесь к исходному коду для получения подробной информации о существующей реализации и параметрах метода. Например, это может быть полезно, если у вас есть ForeignKey в REQUIRED_FIELDS и вы хотите разрешить создание экземпляра вместо ввода первичного ключа существующего экземпляра.
django.contrib.contenttypes
remove_stale_contenttypes
-
django-admin remove_stale_contenttypes
Эта команда доступна только в том случае, если приложение Django `contenttypes` (django.contrib.contenttypes) установлено.
Удаляет устаревшие типы содержимого (из удалённых моделей) в вашей базе данных. Также будут удалены все объекты, зависящие от удалённых типов содержимого. Список удалённых объектов будет показан перед подтверждением вашего согласия на удаление.
-
--database DATABASE
Указывает базу данных для использования. По умолчанию default.
-
--include-stale-apps
Удаляет устаревшие типы содержимого, включая типы из ранее установленных приложений, удалённых из INSTALLED_APPS. По умолчанию False.
django.contrib.gis
ogrinspect
Эта команда доступна только в том случае, если установлена GeoDjango (django.contrib.gis).
Обратитесь к её description в документации GeoDjango.
django.contrib.sessions
clearsessions
-
django-admin clearsessions
Может выполняться как задача cron или напрямую для очистки истекших сеансов.
django.contrib.sitemaps
ping_google
Эта команда доступна только если установлен фреймворк Sitemaps (django.contrib.sitemaps).
Обратитесь к его description в документации Sitemaps.
django.contrib.staticfiles
collectstatic
Эта команда доступна только если установлено приложение статических файлов (django.contrib.staticfiles).
Обратитесь к его description в документации staticfiles.
findstatic
Эта команда доступна только если установлено приложение статических файлов (django.contrib.staticfiles).
Обратитесь к его description в документации staticfiles.
Основные параметры
Хотя некоторые команды могут иметь свои собственные параметры, каждая команда по умолчанию поддерживает следующие:
-
--pythonpath PYTHONPATH
Добавляет заданный путь к файловой системе в путь поиска импорта Python. Если это не указано, django-admin будет использовать переменную окружения PYTHONPATH.
Этот параметр не нужен в manage.py, так как он сам устанавливает путь к Python.
Пример использования:
django-admin migrate --pythonpath='/home/djangoprojects/myproject'
-
--settings SETTINGS
Указывает модуль настроек, который нужно использовать. Модуль настроек должен быть в синтаксисе Python-пакета, например mysite.settings. Если это не указано, django-admin будет использовать переменную окружения DJANGO_SETTINGS_MODULE.
Этот параметр не нужен в manage.py, так как он по умолчанию использует settings.py из текущего проекта.
Пример использования:
django-admin migrate --settings=mysite.settings
-
--traceback
Отображает полный стек вызовов при возникновении CommandError. По умолчанию django-admin будет показывать сообщение об ошибке при возникновении CommandError и полный стек вызовов для любых других исключений.
Этот параметр игнорируется runserver.
Пример использования:
django-admin migrate --traceback
-
--verbosity {0,1,2,3}, -v {0,1,2,3}
Указывает количество сообщений и отладочной информации, которое команда должна выводить в консоль.
-
0означает отсутствие вывода. -
1означает обычный вывод (по умолчанию). -
2означает подробный вывод. -
3означает очень подробный вывод.
Этот параметр игнорируется runserver.
Пример использования:
django-admin migrate --verbosity 2
-
--no-color
Отключает цветной вывод команд. Некоторые команды форматируют свой вывод, чтобы сделать его цветным. Например, ошибки будут выводиться в консоль красным цветом, а SQL-запросы будут иметь синтаксическую подсветку.
Пример использования:
django-admin runserver --no-color
-
--force-color
Вынуждает использовать цветной вывод команд, если он отключен, как описано в Синтаксическая подсветка. Например, вы можете передать цветной вывод другой команде.
-
--skip-checks
Пропускает выполнение системных проверок перед выполнением команды. Этот параметр доступен только если атрибут команды requires_system_checks не является пустым списком или кортежем.
Пример использования:
django-admin migrate --skip-checks
Дополнительные возможности
Синтаксическая подсветка
-
DJANGO_COLORS
Команды django-admin / manage.py будут использовать красивое цветное форматирование вывода, если ваш терминал поддерживает ANSI-цветной вывод. Он не будет использовать цветовые коды, если вы передаёте вывод команды другой программе, если не используется опция --force-color.
Поддержка Windows
В Windows 10 приложения Windows Terminal, VS Code и PowerShell (где включена обработка виртуального терминала) поддерживают цветной вывод по умолчанию.
В Windows, старая консоль cmd.exe не поддерживает ANSI-последовательности, поэтому по умолчанию цветной вывод отсутствует. В этом случае вам необходимы сторонние библиотеки:
-
Установите colorama, пакет Python, который преобразует ANSI-цветные коды в вызовы Windows API. Команды Django обнаружат его наличие и будут использовать его для форматирования вывода так же, как и на платформах Unix.
coloramaможно установить через pip:...\> py -m pip install colorama
- Установите ANSICON, сторонний инструмент, который позволяет
cmd.exeобрабатывать ANSI-цветные коды. Команды Django обнаружат его наличие и будут использовать его для форматирования вывода так же, как и на платформах Unix.
Другие современные среды терминалов в Windows, поддерживающие цвета терминала, но не автоматически распознаваемые Django, могут «симулировать» установку ANSICON путем установки соответствующей переменной среды ANSICON="on".
Настройка цветов
Цвета, используемые для синтаксической подсветки, можно настроить. Django поставляется с тремя цветовыми палитрами:
dark, подходит для терминалов, которые отображают белый текст на чёрном фоне. Это палитра по умолчанию.light, подходит для терминалов, которые отображают чёрный текст на белом фоне.nocolor, которая отключает синтаксическую подсветку.
Вы выбираете палитру, установив переменную среды DJANGO_COLORS для указания желаемой палитры. Например, чтобы указать палитру light в оболочке Unix или OS/X BASH, вы выполнили бы следующее в командной строке:
export DJANGO_COLORS="light"
Вы также можете настроить используемые цвета. Django определяет ряд ролей, в которых используется цвет:
error- Серьёзная ошибка.notice- Незначительная ошибка.success- Успех.warning- Предупреждение.sql_field- Имя поля модели в SQL.sql_coltype- Тип поля модели в SQL.sql_keyword- Ключевое слово SQL.sql_table- Имя модели в SQL.http_info- Информационный ответ сервера HTTP (1XX).http_success- Ответ сервера HTTP (2XX).http_not_modified- Ответ сервера HTTP (304).http_redirect- Переадресация сервера HTTP (3XX, кроме 304).http_not_found- Ответ сервера HTTP (404).http_bad_request- Ошибка запроса сервера HTTP (4XX, кроме 404).http_server_error- Ошибка сервера HTTP (5XX).migrate_heading- Заголовок в команде управления миграциями.migrate_label- Имя миграции.
Каждой из этих ролей можно назначить определённый цвет переднего и заднего плана из следующего списка:
blackredgreenyellowbluemagentacyanwhite
Каждый из этих цветов затем можно изменить, используя следующие параметры отображения:
boldunderscoreblinkreverseconceal
Запись цвета следует одному из следующих шаблонов:
role=fgrole=fg/bgrole=fg,option,optionrole=fg/bg,option,option
где role - имя допустимой роли цвета, fg - цвет переднего плана, bg - цвет заднего плана, а каждый option - один из параметров изменения цвета. Несколько спецификаций цвета разделяются точкой с запятой. Например:
export DJANGO_COLORS="error=yellow/blue,blink;notice=magenta"
указывает, что ошибки отображаются мигающим жёлтым цветом на синем фоне, а уведомления - пурпурным. Все остальные роли цвета остаются без цвета.
Цвета также можно задавать, расширяя базовую палитру. Если вы укажете имя палитры в задании цвета, все цвета, подразумеваемые этой палитрой, будут загружены. Например:
export DJANGO_COLORS="light;error=yellow/blue,blink;notice=magenta"
укажет использование всех цветов из светлой цветовой палитры, за исключением цветов для ошибок и уведомлений, которые будут перезаписаны, как указано.
Автодополнение Bash
Если вы используете оболочку Bash, рассмотрите установку скрипта автодополнения Django для Bash, который находится в extras/django_bash_completion в дистрибутиве исходного кода Django. Он позволяет автоматически дополнять django-admin и manage.py команды, так что вы можете, например…
- Напечатать
django-admin. - Нажать [TAB], чтобы увидеть все доступные варианты.
- Напечатать
sql, затем [TAB], чтобы увидеть все доступные варианты, имена которых начинаются сsql.
См. Как создать пользовательские команды django-admin, чтобы узнать, как добавить настраиваемые действия.
Форматирование Black
Файлы Python, созданные командами startproject, startapp, optimizemigration, makemigrations и squashmigrations, будут отформатированы с помощью команды black , если она присутствует в вашей PATH.
Если у вас black глобально установлено, но вы не хотите использовать его для текущего проекта, вы можете явно установить PATH:
PATH=path/to/venv/bin django-admin makemigrations
Для команд, использующих stdout, вы можете перенаправить вывод в black при необходимости:
django-admin inspectdb | black -
Выполнение команд управления из вашего кода
-
django.core.management.call_command(name, *args, **options)
Чтобы вызвать команду управления из кода, используйте call_command.
-
name - имя вызываемой команды или объект команды. Использование имени предпочтительнее, если объект не требуется для тестирования.
-
*args - список аргументов, принимаемых командой. Аргументы передаются в парсер аргументов, поэтому вы можете использовать тот же стиль, что и в командной строке. Например,
call_command('flush', '--verbosity=0'). -
**options - именованные параметры, принимаемые в командной строке. Параметры передаются команде без запуска парсера аргументов, что означает, что вам нужно передать правильный тип. Например,
call_command('flush', verbosity=0)(ноль должен быть целым числом, а не строкой).
Примеры:
from django.core import management
from django.core.management.commands import loaddata
management.call_command('flush', verbosity=0, interactive=False)
management.call_command('loaddata', 'test_data', verbosity=0)
management.call_command(loaddata.Command(), 'test_data', verbosity=0)
Обратите внимание, что параметры команд, не принимающие аргументы, передаются в качестве ключевых слов с True или False, как вы можете видеть с параметром interactive выше.
Именованные аргументы могут быть переданы, используя любой из следующих синтаксисов:
# Similar to the command line
management.call_command('dumpdata', '--natural-foreign')
# Named argument similar to the command line minus the initial dashes and
# with internal dashes replaced by underscores
management.call_command('dumpdata', natural_foreign=True)
# `use_natural_foreign_keys` is the option destination variable
management.call_command('dumpdata', use_natural_foreign_keys=True)
Некоторые параметры команд имеют разные имена при использовании call_command() вместо django-admin или manage.py. Например, django-admin
createsuperuser --no-input переводится как call_command('createsuperuser',
interactive=False). Чтобы узнать, какое имя ключевого аргумента использовать для call_command(), проверьте исходный код команды на предмет аргумента dest, переданного parser.add_argument().
Параметры команд, принимающие несколько параметров, передаются как список:
management.call_command('dumpdata', exclude=['contenttypes', 'auth'])
Значение возвращаемое функцией call_command() такое же, как значение возвращаемое методом handle() команды.
Перенаправление вывода
Обратите внимание, что вы можете перенаправлять потоки стандартного вывода и ошибок, так как все команды поддерживают параметры stdout и stderr. Например, вы можете написать:
with open('/path/to/command_output', 'w') as f:
management.call_command('dumpdata', stdout=f)
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/4.1/ref/django-admin/