Vanson's Eternal Blog

Python框架Flask

Python flask.png
Published on
/2 mins read/---

Flask

Basic

生命周期

步骤描述
1客户端(如浏览器)发起 HTTP 请求
2WSGI 服务器(如 gunicorn、uWSGI)接收请求
3服务器将 HTTP 数据转换为 WSGI 环境字典(environ)
4服务器调用 Flask 应用对象(即 WSGI callable)
5Flask 内部处理:路由匹配、调用视图函数、异常处理等
6Flask 将视图函数的返回值封装为 WSGI 响应
7WSGI 服务器将响应转换为 HTTP 响应并返回
8客户端接收响应并渲染页面
浏览器
  │
  │ HTTP GET /hello/alice
  │
  ▼
WSGI 服务器
  │ environ, start_response
  │
  ▼
Flask.__call__
  │  ↓ 创建 RequestContext
  ▼
ctx.push()
  │  ↓ 绑定 request, session, g
  ▼
before_request 钩子
  │  ↓ 可以中断返回
  ▼
dispatch_request()
  │  ↓ 路由匹配 /hello/<name>
  ▼
hello(name='alice') 视图
  │  ↓ return 'Hello alice'
  ▼
make_response()
  │  ↓ str → Response
  ▼
after_request 钩子
  │  ↓ 可给响应加头
  ▼
session.save_session()
  │  ↓ Set-Cookie
  ▼
ctx.pop()
  │  ↓ teardown_request
  ▼
start_response(status, headers)
  │
  ▼
HTTP/1.1 200 OK
  │
浏览器 ◄--------响应体
sequenceDiagram
    participant Client as 客户端
    participant Server as WSGI 服务器
    participant Flask as Flask 应用
    participant View as 视图函数
 
    Client->>Server: HTTP 请求
    Server->>Flask: 调用 app(environ, start_response)
    Flask->>Flask: 创建请求上下文
    Flask->>Flask: 路由匹配 (url_map)
    Flask->>View: 执行视图函数
    View->>Flask: 返回响应数据
    Flask->>Flask: 转换 Response 对象
    Flask->>Flask: 执行 after_request 钩子
    Flask->>Server: 返回响应
    Server->>Client: 发送 HTTP 响应
    Flask->>Flask: 销毁上下文
← Previous postPython类库Inspect
Next post →Python类库Pandas