【django】1-2 django项目的请求处理流程(详细)

发布于:2025-04-03 ⋅ 阅读:(12) ⋅ 点赞:(0)


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外,也可以用另外两种方式在命令行完成同样的操作:

  1. django的每个项目中的manage.py文件。注意每个manage.py和所在项目的配置文件绑定。
  2. 在命令行直接以模块的方式运行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步:

  1. Web服务器接收请求
    python的gunicorn等库可以创建服务,监听客户端请求,把原始请求转换为WSGI协议格式,然后传给django应用中创建的application。

  2. 生成请求对象
    wsgi.py文件中创建了application对象,可以接收服务器传来的协议数据,转换为django的HttpRequest对象,然后调用中间件处理它。

    wsgi.py和asgi.py都是连接Web服务器和django应用的入口文件。分别对应python的WSGI和ASGI服务器接口协议。
    WSGI可处理同步请求,适用于短连接的普通HTTP请求;ASGI支持异步请求、WebSocket和长连接。

  3. 中间件处理请求
    settings.py的MIDDLEWARE列表中的中间件从上到下依次执行。
    中间件可以修改请求对象、拦截非法请求。

  4. URL路由
    根据urls.py中定义的URL模式解析请求路径,匹配对应的视图。把请求对象和URL参数传给视图。

  5. 视图处理
    views.py中的视图函数或视图类接收请求对象和参数。通过模型操作数据库,然后把处理结果交给模板渲染。

  6. 模型操作
    models.py中定义了ORM模型,用于将python对象映射到数据库,更方便地执行CRUD操作。

  7. 模板渲染
    接收上下文变量,通过django模板引擎动态生成HTML。

  8. 视图返回响应
    经过上述处理后,返回HttpResponse对象。

  9. 中间件处理响应
    settings.py的MIDDLEWARE列表中的中间件从下到上依次执行。
    中间件可以修改响应对象。

  10. 响应对象转换
    application接收响应对象,提取状态码和响应头,转换为WSGI要求的格式后,通知WSGI服务器,然后把响应体转换为WSGI要求的内容返回。

  11. WSGI服务器返回响应数据
    HttpResponse对象转为HTTP报文返回给客户端。

把上面的11步分到请求、处理、响应三个阶段,流程图如下。

响应阶段
视图处理阶段
请求阶段
wsgi.py
views.py
wsgi.py
urls.py
原始请求
协议数据
请求对象
处理后的请求对象
调用
数据处理
提供models
Query查询
数据
处理后的响应对象
响应
响应报文
请求对象
URL参数
响应对象
MIDDLEWARES
服务器
客户端
application
models.py
数据库
models
视图函数或视图类
render
模板参数
服务器
客户端
MIDDLEWARES
urlpatterns
application


网站公告

今日签到

点亮在社区的每一天
去签到