• django python mange.py runserver 源码


    django python mange.py runserver 源码  

    入 口

        mange.py文件  

          execute_from_command_line函数 输入参数为['manage.py', 'runserve'] sys模块监听命令行输入 并将值放入argv
          并执行

    进入后 直接到达 django-core-mangement- __init__ 内 

    execute_from_command_line函数
       执行后 ---ManagementUtility 实例化 并且执行了execute() 方法

    其中 实例化 ManagementUtility 目录结构如下



    实例化运行__init__

      

     execute 执行 官方注释为:

    """
    Given the command-line arguments, figure out which subcommand is being
    run, create a parser appropriate to that command, and run it.
    """

    给定命令行参数,找出哪个子命令创建适合该命令的解析器,然后运行

     来到fetch_command函数内 发现最终返回klass对象执行其run_from_argv方法 而当前klass对象经过了load_command_class 映射 为方便理解  后面我们再去看

    
    

     klass 对象 执行 run_from_argv 如下  

    进入 execute后

    注意 handle 函数 会优先 执行当前对象的handle 没有之后再去寻找父类handle
    而我们当前对象为runserver的commands

     之所以能映射到management.commmands.runserver.command 是之前提到了的 load_command_class  做的映射

    load_command_class 如下:

    module = import_module('%s.management.commands.%s' % (app_name, name))  #其内部字符串为 django.contrib.staticfiles.management.commands.runserver #提示import_module就是常用的importlib.import_module 即以字符串类型的索引导入类

     我们按照路径去到 runserver模块内部 发现内部如下

    因为其内部并没有handle 函数 所以我们进入其父类 寻找

    我们进入core.management.command.runserver 找到了handle

    进过上面的映射 我们终于找到了 runserver 下的handle 并执行run函数

    但是并没有看到我们希望的核心代码 经过打印我们知道 此时use_reloader =True 意味着我们执行

    autoreload.run_with_reloader(self.inner_run, **options)
    进入其内部

    来到start_django 终于 终于` 我们看到了django 启动的核心

     

  • 相关阅读:
    Python shutil模块
    configparser模块来生成和修改配置文件
    用random模块实现验证码
    python 正则re模块
    python 装饰器
    python迭代器和生成器
    python替换一个文件里面的特定内容
    广告资源收集
    Java 语言中 Enum 类型的使用介绍
    FreeMarker + xml 导出word
  • 原文地址:https://www.cnblogs.com/Sunbreaker/p/13185894.html
Copyright © 2020-2023  润新知