[Django 2.2] 分析 django-admin startproject 都做了哪些操作

创建项目 django-admin startproject

假设系统已安装django2.2
在安装完成 django 后,在命令行下执行以下命令,创建项目名称为"project":

django-admin startproject project

Django 会在当位置下创建 project 目录:(tree 命令需要单独安装)
创建项目截图
首先,通过 whereis 查找 django-admin 命令所在位置

whereis django-admin

在这里插入图片描述
通过 vim/vi 打开 django-admin 程序文件。通过文件,可以发现django-admin 是引入并执行"django.core.management" 包内的 execute_from_command_line 方法
在这里插入图片描述
打开django2.2 源码并找到 “django/core/management/init.py”, 在该文件的结尾处可以发现 “execute_from_command_line()” 函数的定义。
根据这个函数,我们就可以继续向下寻找django 在运行 startproject 命令时,到底为我们做了哪些工作。

从上至下,主要调用的类与方法(只按正常情况列出,其它逻辑分支未列出)

$django/core/management/__ init__.py

1. def execute_from_command_line()  #$django/core/management/__ init__.py
2. class ManagementUtility:  #$django/core/management/__ init__.py
		def execute()
		def fetch_command()  #返回当前命令所指向的对象,如对象未实例化,则调用函数 load_command_class(app_name, subcommand) 创建新对象。
		
        def load_command_class()  #根据传入参数,载入 $django/core/management/commands/xxxx.py 对应模块文件
        
3.# $django/core/management/commands 目录下存放默认django-admin 支持的所有命令操作程序,当前分析的是 startproject , 打开 startproject.py 文件,即可看到该命令到底做了哪些操作。	

$django/core/management/commands/startproject.py
部分代码

class Command(TemplateCommand):
    help = (
        "Creates a Django project directory structure for the given project "
        "name in the current directory or optionally in the given directory."
    )
    missing_args_message = "You must provide a project name."
    def handle(self, **options):
        project_name = options.pop('name')
        target = options.pop('directory')

        # Create a random SECRET_KEY to put it in the main settings.
        options['secret_key'] = get_random_secret_key()
		#调用父类 TemplateCommand.handle()方法
		#该方法主要用途是基于 $django/conf/project_template 目录下的*.py-tpl 文件与子目录,生成我们想要创建的初始化项目文件结构。如想自定制django-admin 默认创建项目结构与文件初始化代码,可以在这个目录下修改。
		#$django/core/management/templates.py
		
        super().handle('project', project_name, target, **options)
        

创建项目初始化模板目录结构,

1.初始化项目资源位置 $django/conf/project_template
2.初始化应用资源位置 $django/conf/app_template

先写这么多,有时间再详细分析

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值