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的模板,同样的原理。

posted @ 2019-10-24 14:36  sankforever  阅读(506)  评论(0)    收藏  举报