之前写了一篇代码分析,主要是对自己写的代码进行逻辑梳理。现在结合django本身再分析一次。
1. manage.py
首先,启动项目后先访问到的是manage.py文件
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "testApp.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)
文件先将testApp.settings设置为环境DJANGO_SETTINGS_MODULE的参数。然后通过execute_from_command_line执行参数,这里的sys.argv为[‘D:/workspace/workspaceDjango/testApp/manage.py’, ‘runserver’, ‘8000’]
2. setting.py
然后项目的所有配置就会在setting中被加载,包括安装应用(INSTALLED_APPS),中间件(MIDDLEWARE),根访问路径(ROOT_URLCONF),模板(TEMPLATES),WSGI(WSGI_APPLICATION),数据库(DATABASES),密码验证(AUTH_PASSWORD_VALIDATORS)等等。
下面关注几个配置
2.1 INSTALLED_APPS
上一篇文章提到过,Django规定如果要使用模型,必须要创建一个app。那么创建的app就需要在这里进行声明,这样在项目启动时才能被加载进去。
2.2 MIDDLEWARE
和安装应用一样
2.3 ROOT_URLCONF
默认为xxx.urls,即指定将URLs路由到视图的列表文件。
2.4 TEMPLATES
指定访问文件路径
2.5 WSGI_APPLICATION
指定一个WSGI:Web Server Gateway Interface。 WSGI接口要求Web开发者实现一个可以响应HTTP请求的函数。
3. 访问
在加载好了这些之后,我们在浏览器输入要访问的路径,Django就会根据指定的ROOT_URLCONF查找到urls.py,再进行下一步查找和响应(后面就是前一次对代码分析的内容了。)
4. 0001_initial.py
在分析文件的时候,看到多了一个0001_initial.py文件,打开发现就是我们在创建模型的时候对数据库的操作。
# Generated by Django 2.0.5 on 2018-05-26 07:07
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Test',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=20)),
],
),
]
这个自动创建的文件就是我们在执行命令的时候执行的文件,它根据models.py自动生成,若以后我们有更多的模型,应该还会有0002_initial.py,0003_initial.py。。。等等。