Как настроить команду shell
¶
Django shell
- это интерактивная среда Python, которая предоставляет доступ к моделям и настройкам, что делает ее полезной для тестирования кода, экспериментов с запросами и взаимодействия с данными приложения.
Настройка команды shell
позволяет добавить дополнительные функциональные возможности или предварительно загрузить определенные модули. Для этого создайте новую команду управления, которая является подклассом django.core.management.commands.shell.Command
и переопределяет существующую команду управления shell
. Для получения более подробной информации обратитесь к руководству по overriding commands.
Настройка автоматического импорта¶
Чтобы настроить режим автоматического импорта для команды управления shell
, переопределите метод get_auto_imports()
. Этот метод должен возвращать последовательность путей импорта для объектов или модулей, доступных в приложении. Например:
polls/management/commands/shell.py
¶from django.core.management.commands import shell
class Command(shell.Command):
def get_auto_imports(self):
return super().get_auto_imports() + [
"django.urls.reverse",
"django.urls.resolve",
]
Приведенная выше настройка добавляет resolve()
и reverse()
в пространство имен по умолчанию, которое уже включает все модели из приложений, перечисленных в INSTALLED_APPS
. Эти объекты будут доступны в shell
без необходимости ручного импорта.
Выполнение этой настроенной команды shell
с помощью verbosity=2
покажет:
8 objects imported automatically:
from django.contrib.admin.models import LogEntry
from django.contrib.auth.models import Group, Permission, User
from django.contrib.contenttypes.models import ContentType
from django.contrib.sessions.models import Session
from django.urls import resolve, reverse
Если переопределенная команда shell
содержит пути, которые невозможно импортировать, эти ошибки отображаются, если для параметра verbosity
установлено значение 1
или выше. Повторяющийся импорт обрабатывается автоматически.
Обратите внимание, что автоматический импорт может быть отключен для определенного сеанса shell
с помощью флага --no-imports
. Чтобы навсегда отключить автоматический импорт, замените get_auto_imports()
на None
:
class Command(shell.Command):
def get_auto_imports(self):
return None