shell 명령을 사용자 정의하는 방법¶
Django :djadmin:`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",
]
위 사용자 정의는 :func:`~django.urls.resolve`와 :func:`~django.urls.reverse`를 기본 네임스페이스에 추가합니다. 기본 네임스페이스에는 :setting:`INSTALLED_APPS`에 나열된 앱의 모든 모델과 기본적으로 불러오는 항목이 포함되어 있습니다. 이러한 객체는 수동으로 불러오지 않아도 ``shell``에서 사용할 수 있습니다.
이렇게 사용자 정의된 shell 명령을 ``verbosity=2``로 실행하면 다음과 같이 표시됩니다.
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
``django.conf.settings``과 같은 공통 유틸리티의 자동 불러오기가 추가되었습니다.
오버라이드된 shell 명령에 불러올 수 없는 경로가 포함된 경우 verbosity``가 ``1 이상으로 설정되어 있으면 이러한 오류가 표시됩니다. 중복 불러오기는 자동으로 처리됩니다.
자동 불러오기는 --no-imports 플래그를 사용해 특정 shell 세션에서 비활성화할 수 있습니다. 자동 불러오기를 영구적으로 비활성화하려면 ``get_auto_imports()``가 ``None``을 반환하도록 오버라이드하세요:
class Command(shell.Command):
def get_auto_imports(self):
return None