在上一篇里,我只是初始化了一个空的web项目,并没有对项目进行深入说明,这一篇将详细说明项目目录结构。
项目目录结构
项目下manage.py文件,这个是管理项目的文件,启动和结束等其他管理动作。
项目下的blog文件夹展开,下面有的几个重要文件
__init__.py文件,这是一个空文件,它的作用是让一个代码文件夹变成一个可以被import的软件包。
settings.py文件,这个是项目的配置文件,包括网站语言,时区,数据库连接配置,静态文件目录配置等。
urls.py文件,这个是项目的路由系统,即URL和处理其函数的对应关系。
wsgi.py文件,这个是WSGI兼容的web服务器的入口,一般基本不动。
asgi.py文件,同WSGI一样,Django 也支持使用ASGI来部署,它是为了支持异步网络服务器和应用而新出现的 Python 标准,一般基本不动。
项目配置文件说明
settings.py 这个就是项目的配置文件。
先来从上往下看看文件里面的一些内容。
BASE_DIR = Path(__file__).resolve().parent.parent
这个BASE_DIR就是这个项目的所在路径,这里不需要动它,后面我们会用到,接着往下看,我们会看到:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', }}
这段内容的意思是为项目指定后端使用的数据库,这里项目默认使用sqlite数据库,我们可以指定项目使用MySQL,Oracle,Postgres等数据库。
LANGUAGE_CODE = 'en-us'TIME_ZONE = 'UTC'
这里就是指定项目的语言和时间,默认是英语和格林威治时间,这里一般更改为:
LANGUAGE_CODE = 'zh-hans'TIME_ZONE = 'Asia/shanghai'
到此,一个settings.py的主要配置我们已经说完了,当然该文件还有一些重要的东西,我们在后面会再提到。
urls.py 这个就是url的路由系统。
打开urls.py文件,能看到如下内容:
from django.contrib import adminfrom django.urls import pathurlpatterns = [ path('admin/', admin.site.urls),]
下面的admin/,就是表示url匹配到admin这条路由的时候,去执行admin.site.urls这个最终对应的视图函数。后面会展开说明路由系统。
应用目录结构
上一篇我们创建了一个名为app的应用,这里我们展开app应用,对该目录下面的有关内容进行说明
__init__.py 仍然是表示把app这个应用变成一个可import的包
admin.py 这个就是app这个应用的数据库后台管理文件,后面会展开
models.py 这个是app应用的有关数据库操作的文件
tests.py 这个是应用的自动化单元测试
views.py 这个就是业务逻辑代码
apps.py 这个是django把工程项目和应用关联起来的文件
migrations 这个文件夹是应用和数据库相关的文件
Django请求流程
下面说明一下Django框架处理用户请求流程:
用户通过浏览器发起request请求
请求到达django框架的request middlewares,中间件对request做预处理或者直接response请求
路由分发器通过urls.py文件查找用户请求url对应的view
view middlewares被访问,同样对request做预处理或者直接response请求
调用view函数,执行业务逻辑,包括操作数据库等中间件。
view函数处理结果被返回给response middlewares
response middlewares加工response数据
最终的response数据返回给浏览器,呈现给用户