本文目录导读:

- Django 内置的“微分析”功能
- 最常用的第三方内置标准:Django Debug Toolbar
- Python 标准库
cProfile(函数级性能分析) - 生产环境性能监控(非内置)
- 总结:Django 内置分析工具就这些
- 建议
是的,Django 本身自带了一些基础的性能分析工具,但功能相对有限,主要内置的是 django.test.utils 中的 setup_test_router 和断言类,以及 基于中间件的查询计数。
更核心的性能分析(如 SQL 查询分析、视图耗时、内存使用等)通常需要结合 Django Debug Toolbar(第三方)或 Python 标准库 cProfile 来实现,下面帮你梳理一下 Django 自带的与分析相关的功能,以及最常用的第三方工具情况。
Django 内置的“微分析”功能
虽然 Django 没有像 New Relic 那样的一站式内置性能监控面板,但以下两个地方算是内置的“性能痕迹”:
a. django.db.connection.queries(SQL 查询日志)
在 DEBUG=True 模式下,Django 会记录所有执行的 SQL 查询。
from django.db import connection
# 在视图或 shell 中
print(connection.queries)
# 输出示例:
# [{'sql': 'SELECT ...', 'time': '0.002'}, ...]
- 用途:检查 N+1 查询问题、慢查询。
- 注意:仅在 DEBUG=True 时有效,生产环境不应开启。
b. django.test.utils.CaptureQueriesContext(测试中的查询计数)
在单元测试中,你可以精确计数一个操作执行了多少次 SQL。
from django.test.utils import CaptureQueriesContext
from django.db import connection
with CaptureQueriesContext(connection) as ctx:
# 执行一些操作,如访问页面
response = self.client.get('/some-url/')
print(len(ctx)) # 输出的数字就是 SQL 查询次数
- 用途:在 CI 中防止代码引入过多的数据库查询。
c. django.test.runner.DiscoverRunner 的 setup_test_router(测试性能)
测试框架本身会记录测试运行时间,但不会自动提供细粒度 profiling。
最常用的第三方内置标准:Django Debug Toolbar
这不是 Django 自带的,但被官方文档推荐,且几乎是所有 Django 项目的标配开发工具。
pip install django-debug-toolbar
它能做什么?
- SQL 面板:显示所有执行的 SQL、耗时、重复查询、查询次数。
- 性能面板:显示请求耗时、CPU 时间、ORM 查询次数。
- 缓存面板:显示缓存命中/未命中。
- 请求/响应面板:显示请求头、Session、Cookies。
配置示例:
# settings.py
INSTALLED_APPS = [
# ...
'debug_toolbar',
]
MIDDLEWARE = [
# ...
'debug_toolbar.middleware.DebugToolbarMiddleware',
]
INTERNAL_IPS = ['127.0.0.1'] # 仅开发环境使用
适用场景:开发和本地调试。(生产环境不要开启)
Python 标准库 cProfile(函数级性能分析)
如果你需要分析代码执行时间花在了哪个函数上(比如某个视图函数内部哪一行慢),可以用 Python 自带的 cProfile。
在视图或命令中手动使用
import cProfile, pstats
profiler = cProfile.Profile()
profiler.enable()
# 你的视图逻辑或函数
result = expensive_function()
profiler.disable()
pstats.Stats(profiler).sort_stats('cumtime').print_stats(10)
通过 Django 管理命令(第三方插件)
有一个非常轻量级的第三方包叫 django-cprofile-middleware,可以在浏览器中直接看到每个视图的 cProfile 结果。
pip install django-cprofile-middleware
生产环境性能监控(非内置)
Django 没有内置生产环境 APM,常用的第三方解决方案包括:
- Sentry(错误 + 性能追踪)
- New Relic / AppDynamics(完整 APM)
- Datadog APM
- Silk(类似 Django Debug Toolbar 但可运行在生产环境,记录慢请求)
Django 内置分析工具就这些
| 工具 | 是否 Django 内置 | 主要用途 | 适用环境 |
|---|---|---|---|
connection.queries |
✅ 是 | 查看 SQL 查询语句和耗时 | 开发、调试(DEBUG=True) |
CaptureQueriesContext |
✅ 是 | 测试中精确统计 SQL 查询次数 | 单元测试 |
| Django Debug Toolbar | ❌ 第三方 | 可视化显示 SQL、耗时、缓存等 | 开发环境 |
| cProfile | ❌ Python 标准库 | 函数级别的 CPU 耗时分析 | 开发、性能调优 |
| Sentry / New Relic | ❌ 第三方 | 生产环境性能监控 | 生产环境 |
建议
- 开发阶段:安装 Django Debug Toolbar,这是最直接、最常用的内置化分析工具(虽非 Django 自带,但已成社区标准)。
- 优化查询:利用
connection.queries或 Django Debug Toolbar 的 SQL 面板发现 N+1 问题。 - 深入调优:使用
cProfile定位热点函数。 - 生产监控:使用 Sentry 或 Datadog 等专业 APM。
如果你在生产环境想用一些轻量级的“准内置”方案,有一些第三方包(如 django-silk)可以在生产环境中记录慢请求,但都不是 Django 官方自带的。