大家好,这是皮爷给大家带来的最新的学习Python能干啥?之Django教程的进阶版。
在之前《用Django全栈开发》系列专辑里面,皮爷详细的阐述了如何编写一个完整的网站,具体效果可以在源码里面查看。
从进阶篇开始,每一篇文章都是干货满满,干的不行。这一节,我们来说:Django的初始化启动。
Peekpa.com的官方地址:http://peekpa.com
获取整套教程源码唯一途径,关注『皮爷撸码』,回复『peekpa.com』
皮爷的每一篇文章,都配置相对应的代码。这篇文章的代码对应的Tag是“Advanced_08”。
Django启动流程
众所周知,如果要启动一个Django项目,我们使用的命令是:
$ python manage.py runserver <xx.xx.xx.xx:xx>
命令后面的尖括号里面的内容,是选择性填写的。其实,最关键的就是runserver
这个命令。
这个命令是在manage.py
里面。
所以,我们来到项目目录下的manage.py
文件里,看到:
if __name__ == '__main__':
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Peekpa.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv) # 这里运行
最关键的是最后一句:
execute_from_command_line(sys.argv) # 这里运行
步骤一
然后点进去我们看源码:
def execute_from_command_line(argv=None):
"""Run a ManagementUtility."""
utility = ManagementUtility(argv)
utility.execute()
这里其实是初始化了一个实例,然后调用了execute()
方法。
这个方法其实挺长的,在django.core.management.__init__
文件里。
步骤二
这个execute()
方法里面,最重要的是以下方法:
def execute(self):
....内容太多忽略....
django.setup()
....内容太多忽略....
步骤三
在上面的这个django.setup()
方法中,代码就会调用下面这个方法:
def setup(set_prefix=True):
....内容太多忽略....
apps.populate(settings.INSTALLED_APPS)
可以看到,在这个里面,最终调用的是apps.populate()
,而括号里面的内容,正式我们settings.py里面的INSTALLED_APPS
那个列表。进去这个方法我们看到,这个方法超级长,但是有三处重点:
def populate(self, installed_apps=None):
"""
Load application configurations and models.
Import each application module and then each model module.
It is thread-safe and idempotent, but not reentrant.
"""
....内容太多忽略....
# Phase 1: initialize app configs and import app modules.
....内容太多忽略....
# 创建实例
app_config = AppConfig.create(entry