Hur man anpassar kommandot shell¶
Django shell är en interaktiv Python-miljö som ger tillgång till modeller och inställningar, vilket gör den användbar för att testa kod, experimentera med frågor och interagera med applikationsdata.
Genom att anpassa kommandot shell kan du lägga till extra funktionalitet eller förladda specifika moduler. För att göra detta skapar du ett nytt hanteringskommando som underklassar django.core.management.commands.shell.Command och åsidosätter det befintliga hanteringskommandot shell. För mer information, se guiden om Överskriva kommandon.
Anpassa automatisk import¶
Om du vill anpassa beteendet för automatisk import i hanteringskommandot shell, åsidosätter du metoden get_auto_imports(). Denna metod bör returnera en sekvens av importsökvägar för objekt eller moduler som är tillgängliga i programmet. Till exempel:
polls/hantering/kommandon/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",
]
The customization above adds resolve() and
reverse() to the default namespace, which already includes
all models from the apps listed in INSTALLED_APPS plus what is
imported by default. These objects will be available in the shell without
requiring a manual import.
Att köra detta anpassade shell-kommando med verbosity=2 skulle visa:
13 objects imported automatically:
from django.db import connection, reset_queries, models
from django.conf import settings
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
from django.utils import timezone
Automatic imports of common utilities, such as django.conf.settings,
were added.
Om ett åsidosatt shell-kommando innehåller sökvägar som inte kan importeras visas dessa fel när verbosity är inställt på 1 eller högre. Duplikatimport hanteras automatiskt.
Observera att automatisk import kan avaktiveras för en specifik shell-session med hjälp av --no-imports-flaggan. För att permanent inaktivera automatisk import, åsidosätt get_auto_imports() så att den returnerar None:
class Command(shell.Command):
def get_auto_imports(self):
return None