django是python用来构建Web应用的框架。
django项目创建后,会自动生成一堆文件。
这里整理了创建和运行django项目的基本操作,以及这些文件的作用,并对应到django的整个请求处理流程中。
1 创建项目
1.1 安装django
>>> pip install django
这条命令会安装最新版的django和它的3个依赖包:
- asgiref,实现python异步web程序和服务器交互;
- sqlparse,用于解析和格式化SQL语句;
- tzdata,提供IANA时区数据库,用于跨时区时间的处理;
验证安装
>>> python -m django --version
1.2 django命令行工具
安装django后,会自动在系统路径中添加django-admin
脚本。它用来在命令行管理任务。
>>> django-admin 命令 选项
除了django-admin
外,也可以用另外两种方式在命令行完成同样的操作:
- django的每个项目中的
manage.py
文件。注意每个manage.py
和所在项目的配置文件绑定。 - 在命令行直接以模块的方式运行django。
等效表达
>>> django-admin 命令 选项
>>> manage.py 命令 选项
>>> python -m django 命令 选项
1.3 创建项目
在指定目录或当前目录下创建一个django项目
django-admin startproject 项目名 [指定目录]
项目的目录结构和各个文件的用途:
manage.py # 管理django项目的命令行工具
django_pro/ # 项目的python包
__init__.py # 表示当前文件夹是一个python包
settings.py # 项目的配置文件
urls.py # 项目的URL声明
asgi.py # 项目运行在兼容ASGI的web服务器上的入口
wsgi.py # 项目运行在兼容WSGI的web服务器上的入口
1.4 运行项目
测试环境
在manage.py
所在的目录运行下面的命令:
>>> python manage.py runserver [IP:PORT]
运行的django服务默认使用本地IP和8000端口。
runserver是调试Django时用到的运行方式,它使用Django自带的WSGI Server运行,主要在测试和开发中使用。
runserver模式运行时,项目修改后会自动重载代码,可以避免反复重启服务器。
生产环境
生产环境下不这么运行,而是使用gunicorn
等工具托管django项目。
pip安装gunicorn
后,可以在项目目录下运行如下命令以启动项目:
>>> gunicorn dhango_pro.wsgi
1.5 创建应用
项目是一个网站使用的配置和应用的集合,而应用是专门做某件事的应用程序。
一个项目可以包含多个应用,应用也可以被很多项目使用。
python manage.py startapp django_app1
应用可以在任意路径下通过
django-admin
创建。
应用的目录结构和各个文件的作用:
django_app1/
__init__.py
admin.py # 网站的后台管理相关配置
apps.py # 配置应用
migrations/ # 模型迁移的文件夹
models.py # 定义模型
tests.py # 创建测试
views.py # 创建视图
由于model和view是业务逻辑相关的,为了Django的扩展性,这两个会放到业务对应的app目录下。
应用创建后,需要添加到settings.py的INSTALLED_APPS中才能完成数据迁移。
2 项目文件对应到请求处理流程
以普通HTTP请求为例,django的请求处理流程可以具体分为11步:
Web服务器接收请求
python的gunicorn
等库可以创建服务,监听客户端请求,把原始请求转换为WSGI协议格式,然后传给django应用中创建的application。生成请求对象
wsgi.py
文件中创建了application
对象,可以接收服务器传来的协议数据,转换为django的HttpRequest
对象,然后调用中间件处理它。wsgi.py和asgi.py都是连接Web服务器和django应用的入口文件。分别对应python的WSGI和ASGI服务器接口协议。
WSGI可处理同步请求,适用于短连接的普通HTTP请求;ASGI支持异步请求、WebSocket和长连接。中间件处理请求
settings.py的MIDDLEWARE列表中的中间件从上到下依次执行。
中间件可以修改请求对象、拦截非法请求。URL路由
根据urls.py中定义的URL模式解析请求路径,匹配对应的视图。把请求对象和URL参数传给视图。视图处理
views.py中的视图函数或视图类接收请求对象和参数。通过模型操作数据库,然后把处理结果交给模板渲染。模型操作
models.py中定义了ORM模型,用于将python对象映射到数据库,更方便地执行CRUD操作。模板渲染
接收上下文变量,通过django模板引擎动态生成HTML。视图返回响应
经过上述处理后,返回HttpResponse对象。中间件处理响应
settings.py的MIDDLEWARE列表中的中间件从下到上依次执行。
中间件可以修改响应对象。响应对象转换
application
接收响应对象,提取状态码和响应头,转换为WSGI要求的格式后,通知WSGI服务器,然后把响应体转换为WSGI要求的内容返回。WSGI服务器返回响应数据
HttpResponse对象转为HTTP报文返回给客户端。
把上面的11步分到请求、处理、响应三个阶段,流程图如下。