django学习笔记之django-admin命令分析
创建项目命令
$ django-admin startproject mysite
命令分析
-
在我们 pip install django 后,会在我们的 /usr/local/bin 下面生成命令脚本 django-admin 和 django-admin.py,这两个是类似的,所以我们用 django-admin 和 django-admin.py 都可以。然后我们可以在终端中输入 echo $PATH,可以看到 /usr/local/bin 在我们的环境变量中,所以这个 django-admin 这个命令才能被系统识别出来。
-
我们从 django-admin.py 文件中的内容可以看到它实际上调用了 django.core.management.execute_from_command_line 方法,django 支持的命令都会经过这个方法来进行处理。先初始化 ManagementUtility 对象,然后调用 execute 方法。从 execute 方法中我们可以看到它用了 CommandParser 来处理命令行参数,CommandParser 继承 ArgumentParser,我去 python 官方文档中去搜了ArgumentParser的用法,具体的用法自己可以看看,很好的命令行解析工具。在它解析命令行参数的时候我看到 --settings 和 --pythonpath 这两个参数,说明它支持指定django的某个设置文件和python路径。
-
函数最后会调用 fetch_command 函数,传入 subcommand 参数,这里的值是 startproject,函数首先会调用 get_commands 方法,返回一个字典 {"startproject": "django.core" ...},字典里面的键是django所支持的命令,值都是django.core,支持的命令都在django.core.management.commands 文件夹下面,最后调用 load_command_class 函数,传入app_name(django.core)和name(startproject)两个参数,函数里面是动态的导入模块 module = import_module('%s.management.commands.%s' % (app_name, name)) ,将 django.core.management.commands.startproject.Command 实例返回,最后我看到生成项目的处理方法在django.core.management.template.handle中,django.conf.project_template文件夹就是django自带的项目模板,django.core.management.template.handle这个方法将 django.conf.project_template 项目文件夹模板复制出来render一些自定义的参数比如项目名称然后初始化出来你创建的项目,django.conf.里面也有app的模板,同样的原理。

浙公网安备 33010602011771号