Django 一次请求响应的过程
Django 一次请求响应的过程
概述
对于 python web 程序一般会分为两个部分:服务程序和应用程序
- 服务程序负责对 socket 服务器进行封装,在请求到来时对请求的数据进行整理
- 应用程序负责具体的逻辑处理。web 框架是为了方便应用程序开发而设计的
python 服务器网关接口(python web server gateway interface 缩写 WSGI)是 python 应用程序或者框架和 web 服务器之间的一种接口。WSGI 并没有官方实现,而是更像一种协议,只要遵照这些协议就可以在任何服务器上运行
Django 请求响应的过程
- 浏览器用户使用 url 发出一个请求
- WEB 应用启动时会生成一个 WSGIHandler 实例
- 该实例会在第一次请求时调用 load_middleware
- 在执行 WSGIHandler 时会按照 settings.py 中的 MIDDLEWARE_CLASSES 顺序加载中间件
- 一个 middleware 包括请求响应的四个阶段 request、view、response、exception,对应方法:process_request、process_view、process_response、process_exception
- 构造 WSGIRequest
- 根据 HTTP 请求构造 WSGIRquest 请求
- request 的 Middleware 中间件进行处理
- 对 request 请求进行预处理,此处可以限制爬虫、特定信息访问失效,返回 response 响应
- URLConf 通过 url.py 文件将 request 请求的 URL 传递给相应的视图
- 该过程会创建 django.core.urlresolvers.RegexURLResolver 的一个实例
- ROOT_URLCONF 的配置产生的每一个在 urlpatterns 列表中
- 如果没有找到匹配的条目,resolver 会产生 django.core.urlresolvers.Resolver404 异常,它是 django.http.Http404 子类。返回 response 响应
- 调用 View 视图中的相应方式处理 request 请求
- 处理 request 请求的内容,部分数据向 Model 模型请求
- 将处理好的数据返回
- 非必需:将数据返回给 Template 进行渲染
- Model 模型将 View 请求的数据进行查询并返回
- 对象关系映射(ORM)定义数据字段,连接数据库,进行创建、增删改查
- Template 模板渲染输出
- 渲染后的 HTML 页面返回给 View 视图,返回 response 响应
- HTTPResponse 被发送到 Response Middlewares 进行处理后返回给浏览器用户
- Response Middleware 可以对返回的 HTTPResponse 进行处理