文档章节

django是怎么开始工作的?

shimmerh
 shimmerh
发布于 2016/03/24 21:14
字数 365
阅读 6
收藏 0

当在命令行中敲入./manage.py runserver,django是怎么开始工作的?

 一、./manage.py runserver

  os.environ.setdefault("DJANGO_SETTINGS_MODULE", "someproject.settings")

  from django.core.management import execute_from_command_line

  execute_from_command_line(sys.argv)

1.Django加载project文件夹中的settings

2.其次,解析命令行中的命令


二、进入 django/core/management 中的 __init__.py中


def execute_from_command_line(argv=None):
    """
    A simple method that runs a ManagementUtility.
    """
    utility = ManagementUtility(argv)
    utility.execute()
  1. 把命令行的参数交给 ManagementUtility类初始化,得到实例utility

  2. utility调用execute()

三、进入execute函数

try:
    subcommand = self.argv[1]
except IndexError:
    subcommand = 'help'  # Display help if no arguments were given.

  1.读子命令,如果没有写,就抛出异常,输出帮助信息

if settings.configured:
    # Start the auto-reloading dev server even if the code is broken.
    # The hardcoded condition is a code smell but we can't rely on a
    # flag on the command class because we haven't located it yet.
    if subcommand == 'runserver' and '--noreload' not in self.argv:
        try:
            autoreload.check_errors(django.setup)()
        except Exception:
            # The exception will be raised later in the child process
            # started by the autoreloader. Pretend it didn't happen by
            # loading an empty list of applications.
            apps.all_models = defaultdict(OrderedDict)
            apps.app_configs = OrderedDict()
            apps.apps_ready = apps.models_ready = apps.ready = True

    # In all other cases, django.setup() is required to succeed.
    else:
        django.setup()

2.检查命令行中runserver后是否接了--noreload(注明:Django在每次修改代码的时候,都会重新reload一次文件,这里的设置,我猜测这里的意思是,先检测代码中所有会报错的可能,如果没有报错可能了才让后续启动,因为取消到autoload后,代码不会每次修改的时候,触发重新加载)

3.执行django.setup(),进入正题。


© 著作权归作者所有

shimmerh
粉丝 0
博文 1
码字总数 365
作品 0
广州
私信 提问
第一部分:使用 Django 克隆个 Hacker News

学习东西最好的方式就是看别人是怎么做的1。所以,如果你一直在等待突破Django的基础知识,你来对地方了。 在这个视频教程系列里,我会带你用Django 1.5从零开始建立一个名为“Steel Rumors(...

renwofei423
2013/06/03
2.4K
0
python3,Django验证码生成方法

python3,Django验证码生成方法 一号门-程序员的工作,程序员的生活(java,python,delphi实战)2017-09-0331 阅读 生成方法验证码python3Django 记得很久以前有尝试过python2.7, Django生成验证码...

一号门-程序员的工作,程序员的生活(java,python,delphi实战)
2017/09/03
0
0
一个9年运维的经验之路

大家好,很久没有写文章了,今天突然有了写一篇自己这9年运维历程的一篇文章,希望可以帮助到才进入运维这行或者还在初、中级阶段的朋友。 入行篇: 我2008年7月份和几个同学为了学到前沿的知...

wiliiwin
2017/11/17
0
0
Django中,如何使用新浪微博API Oauth2的客户端

最近在学习Django,并有幸的获得SAE Python的邀请码,于是开始创建一些应用。 我建立了名为ddmkchan项目,并建立应用sinaweibo,已上传至SAE。开始的想法是做新浪微博相关的,下载了新浪微博...

司徒春运
2012/03/11
2.1K
1
Alfred 杀手级插件: Google Search

简介 和大家分享我自己打造的一个谷歌搜索插件: Google-Alfred-Workflow 我平时写代码,写博客的时候经常免不了要谷歌一下,这时我一般唤醒 Alfred,然后输入搜索关键词,跳转到 Chrome 浏览...

funhacks
2017/11/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
今天
5
0
Spring Boot 如何部署到 Linux 中的服务

打包完成后的 Spring Boot 程序如何部署到 Linux 上的服务? 你可以参考官方的有关部署 Spring Boot 为 Linux 服务的文档。 文档链接如下: https://docs.ossez.com/spring-boot-docs/docs/r...

honeymoose
今天
6
0
Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
今天
8
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
今天
5
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部