Django 请求生命周期详解:从 WSGI 到视图处理

Mason
Mason
发布时间:2026-10-14 | 3人浏览过
原创

本文深入解析 Django 框架中 HTTP 请求的完整生命周期。从 WSGI 接口接收请求开始,依次经过中间件校验、路由匹配、视图函数处理及响应返回。重点对比了 wsgiref 与 werkzeug 的实现差异,并阐述了 FBV 与 CBV 的执行逻辑及 REST Framework 的介入机制,帮助开发者理解底层工作原理。

首先通过一张示意图来直观展示整体流程。

Django 请求生命周期流程

1、请求生命周期

- WSGI:作为 Socket 服务端,负责接收用户请求并进行初步封装,随后将请求传递给 Web 框架(如 Flask、Django)。

- 中间件:用于对请求进行校验或在请求对象中附加相关数据,例如 CSRF 保护、request.session 等。

- 路由匹配:根据 URL 规则确定对应的视图处理逻辑。

- 视图函数:在此阶段执行具体的业务逻辑,可能涉及 ORM 数据库操作或 Templates 模板渲染。

- 中间件:对生成的响应数据进行后续处理。

- WSGI:将最终响应内容发送回浏览器。

WSGI 协议与实现

2、什么是 WSGI

WSGI:Web Server Gateway Interface(Web 服务网关接口)。

实现该协议的常见模块包括:

  • - wsgiref(测试版本,性能较差)
  • - werkzeug
  • - uwsig

wsgiref 示例代码:


from wsgiref.simple_server import make_server
 
def run_server(environ, start_response):
  start_response('200 OK', [('Content-Type', 'text/html')])
  return [bytes('<h1>Hello, web!</h1>', encoding='utf-8'), ] #字节
 
 
if __name__ == '__main__':
  httpd = make_server('127.0.0.1', 8000, run_server)
  httpd.serve_forever()

werkzeug 示例代码:


from werkzeug.wrappers import Response
from werkzeug.serving import run_simple
 
def run_server(environ, start_response):
  response = Response('hello')
  return response(environ, start_response)   #对象
 
if __name__ == '__main__':
  run_simple('127.0.0.1', 8000, run_server)

视图模式:FBV 与 CBV

3、视图 FBV

URL 映射到函数。

CBV

URL 映射到视图类。

FBV(Function Based View)与 CBV(Class Based View)本质相同,区别仅在于 FBV 基于函数,而 CBV 基于类。FBV 相比 CBV 会多执行若干步骤。

REST Framework 介入机制

4、REST Framework

REST Framework 从 dispatch 方法介入,在视图执行完毕后,若存在 REST Framework 组件,则继续执行其逻辑。

5、RESTful 规范

查看 RESTful 规范详情。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表