django源码分析 之 runserver运行背后的事

django5.2.15,python3.11,djangorestframework==3.17.1

  1. django程序的入口文件manage.py
python 复制代码
1 #!/usr/bin/env python 
2 """Django's command-line utility for administrative tasks.""" import os import sys
3
4 if __name__ == "__main__":
5     os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djangoblog.settings")
6     try:
7         from django.core.management import execute_from_command_line
8     except ImportError:

12        try:
13            import django
14        except ImportError:
15            raise ImportError(
16                "Couldn't import Django. Are you sure it's installed and "
17                "available on your PYTHONPATH environment variable? Did you "
18                "forget to activate a virtual environment?"
19            )
20        raise
21    execute_from_command_line(sys.argv)

启动django的方式

方式一:点击run按钮,如下:

方式二:在终端中,输入命令python manage.py runserver 8000,如下

方式一的背后也是以方式二的形式执行的,两者等价。都是以命令行的方式启动django。对应于第18行代码。

点击调试按钮,打断点,可以看到

第9行,通过环境变量DJANGO_SETTINGS_MODULE指向django的设置文件。

第18行,sys.argv是Python 内置模块 sys 提供的命令行参数列表。

如命令python manage.py runserver 8000,则命令行参数列表为'manage.py','runserver', '8000'

ctrl+鼠标点击execute_from_command_line,可以看到

ctr+鼠标点击execute()

可以看到,这里是先做一个命令行参数的解析。

往下看,381行后面

392行关于自动重载,做了一些判断,主要是django的settings配置,日志配置,app注册是否正确。

420行,主要是解析子命令,如果子命令是help,则输出帮助信息等,否则启动runserver,连接数据库(436行)。