1
Python Web 框架概览
Why Python Web & Framework Landscape
先聊两句"为什么用 Python 写 Web",再上三大框架对比表,最后给你一张选型决策图。Web 开发的本质是:浏览器发请求 → 服务器处理 → 返回 HTML/JSON。框架帮你把"路由、请求解析、模板渲染、数据库"这些重复活封装好,你只管写业务。
论为什么选 Python 写 Web
① 开发快:Django 一天能撸出一个带后台的内容站;FastAPI 写个 REST API 几十行就跑起来。② 生态全:ORM、表单、认证、权限、后台、邮件、缓存,开箱即用。③ AI 应用后端首选:你要接大模型、做 RAG、写数据管道,Python 是唯一一等公民——别的语言还在纠结怎么调 PyTorch。
新手常见误区
误区 1:"学 Web 必须先学透 HTTP/TCP"——不用,先把路由+请求响应跑通,遇到问题再回头补。误区 2:"框架选哪个最牛"——没有最好,只有最合适。误区 3:"上来就学 Django 的所有内置功能"——先跑通 hello world,用到啥学啥。误区 4:"生产用 flask run"——绝对不行,前面说过。
三大框架对比
| 框架 | 一句话定位 | 强项 | 弱项 |
|---|---|---|---|
| Flask | 微框架,灵活轻量,"给你一把锤子,钉子自己买" | 极简、自由、生态插件多;适合小项目、微服务、学习 | 不带 ORM/表单/Admin,大项目要自己拼 |
| FastAPI | 现代异步框架,自动生成 API 文档,性能直逼 Node/Go | 原生 async、Pydantic 自动校验、Swagger/ReDoc 自动文档;AI 后端首选 | 不带 Admin,偏 API 而非页面 |
| Django | 全栈框架,batteries-included,"管饱还送勺子" | 自带 ORM / Admin / 认证 / 表单 / 路由 / 模板,大项目省心 | 重、学习曲线陡、异步支持相对晚 |
选型建议
| 你的场景 | 选谁 |
|---|---|
| 小型 API、微服务、学习原型 | Flask(同步够用)或 FastAPI(要异步/文档) |
| AI 应用后端、大模型网关、微服务 | FastAPI(异步 + Pydantic + 自动文档,事实标准) |
| 内容站、管理后台、CMS、电商 | Django(Admin 后台是杀手锏,省一半工作量) |
| 团队多人、要规范、要长期维护 | Django(约定优于配置,不会乱) |
一次 Web 请求的完整生命周期
| 步骤 | 发生了什么 |
|---|---|
| 1. DNS 解析 | 域名 → IP 地址。 |
| 2. TCP/TLS 握手 | 和服务器建立连接(HTTPS 多一步证书校验)。 |
| 3. 发 HTTP 请求 | 浏览器发请求行(方法+路径)、请求头、(可能的)请求体。 |
| 4. 服务器路由匹配 | Nginx → Gunicorn/Uvicorn → 框架路由找到对应视图函数。 |
| 5. 业务处理 | 视图函数执行:查数据库、调模型、渲染模板。 |
| 6. 返回响应 | 状态码 + 响应头 + 响应体(HTML/JSON)。 |
| 7. 浏览器渲染 | 解析 HTML/CSS/JS,显示页面。 |
HTTP 状态码速查
| 码段 | 含义 | 常见例子 |
|---|---|---|
| 2xx | 成功 | 200 OK;201 Created(新建成功);204 No Content(删除成功无返回)。 |
| 3xx | 重定向 | 301 永久;302 临时;304 Not Modified(走缓存)。 |
| 4xx | 客户端错 | 400 参数错;401 未登录;403 没权限;404 找不到;422 校验错(FastAPI 常用)。 |
| 5xx | 服务器错 | 500 内部错误;502 网关错;503 维护中。 |
ASGI vs WSGI:同步还是异步
论两个协议,别搞混
WSGI(Web Server Gateway Interface)是老一代同步标准:Flask/Django 每个请求占一个线程,干完下一个。简单粗暴,但不支持 WebSocket 和长连接。ASGI(Asynchronous Server Gateway Interface)是新一代异步标准:FastAPI/Starlette 一个事件循环挂几千个协程,支持 WebSocket、SSE、长连接。生产部署:FastAPI 用 Uvicorn(或 Gunicorn + UvicornWorker);Flask/Django 用 Gunicorn;前面都套一层 Nginx 处理静态文件和 TLS。