ManagementUtility类,位于django.core.management目录下的__init__.py文件。
这个类,在其init中:
def __init__(self, argv=None):
self.argv = argv or sys.argv[:]
#各个参数
self.prog_name = os.path.basename(self.argv[0])
#这里是去除路径
self.settings_exception = None
然后就是main_help_text,fetch_command,autocomplete,execute四个函数。
下面,仔细分析一下 execute这个函数:
try:
subcommand = self.argv[1]
except IndexError:
subcommand = 'help' # Display help if no arguments were given.
注释写的很明白,如果没有参数,那就把help作为参数赋值进去。
# Preprocess options to extract --settings and --pythonpath.
# These options could affect the commands that are available, so they
# must be processed early.
后续,需要对诸如--settings和--pythonpath等参数进行抽取,预处理。因为这些的设置会影响其他参数的运行。
parser = CommandParser(None, usage="%(prog)s subcommand [options] [args]", add_help=False)
这里,又调用了CommandParser类(后续分析)。
parser.add_argument('--settings')
parser.add_argument('--pythonpath')
parser.add_argument('args', nargs='*') # catch-all
try:
options, args = parser.parse_known_args(self.argv[2:])
handle_default_options(options)
except CommandError:
pass # Ignore any option errors at this point.
这里,在分析透彻CommandParser后,可以更好的理解。
try:
settings.INSTALLED_APPS
#这里的settings = LazySettings(),在conf/__init__.py定义的。
#而LazySettings是一个类,继承自:LazyObject,后续分析。
except ImproperlyConfigured as exc:
self.settings_exception = exc