zoukankan      html  css  js  c++  java
  • 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 启动的核心

     

  • 相关阅读:
    inputstream和outputstream读写数据模板代码
    如何显示包的上一层包
    我的cnblogs设置代码
    myeclipse ctrl+shift+F失效
    数据包加密解密
    用VisualSVN Server创建版本库,以及TortoiseSVN的使用
    权限验证MVC
    Asp.net MVC23 使用Areas功能的常见错误
    MVC基础知识
    最全的Resharper快捷键汇总
  • 原文地址:https://www.cnblogs.com/Sunbreaker/p/13185894.html
Copyright © 2011-2022 走看看