Django Debug Toolbar是否支持DRF?无法显示问题如何排查?
当然支持!Django Debug Toolbar完全能和DRF的可浏览API配合使用,我之前调试API的时候也碰到过工具栏不显示的情况,给你梳理几个实用的排查步骤:
先确认Toolbar的回调配置是否允许DRF页面
默认的SHOW_TOOLBAR_CALLBACK会检查请求是否来自内部IP且响应是HTML,但有时候自定义的回调可能不小心排除了DRF的页面。你可以先临时设置一个宽松的回调来测试:DEBUG_TOOLBAR_CONFIG = { "SHOW_TOOLBAR_CALLBACK": lambda request: True, }如果这样能显示,再把回调改得严谨些,比如判断请求路径是否属于你的API范围,或者响应的Content-Type是
text/html(DRF可浏览API的响应类型)。检查中间件的顺序
debug_toolbar.middleware.DebugToolbarMiddleware必须放在所有会修改响应内容的中间件前面,比如DRF的rest_framework.middleware.APIExceptionHandlerMiddleware、Django的GZipMiddleware这类压缩中间件得排在它后面,不然Toolbar的注入代码会被覆盖或者压缩导致无法显示。核对IP白名单配置
确保INTERNAL_IPS包含你的开发IP,本地开发一般加["127.0.0.1", "::1"]就够了;如果用Docker或者虚拟机开发,还要加上容器/主机的内网IP(比如172.17.0.1),不然Toolbar会因为IP不在白名单里不加载。检查浏览器控制台的错误
打开DRF可浏览API页面后按F12看控制台,有没有JS加载失败、资源找不到的报错——有时候静态文件没正确加载,或者页面里有冲突的脚本,会导致Toolbar无法渲染。确认请求触发了DRF的HTML响应
DRF只有在请求的Accept头包含text/html时才会返回可浏览API的HTML页面,而Toolbar只在HTML响应里注入内容。你可以在浏览器的网络请求里看Accept头,或者用curl测试:curl -H "Accept: text/html" http://localhost:8000/your-api-endpoint/如果返回的是JSON,那说明你的请求没触发可浏览API,自然看不到Toolbar。
排查其他中间件的干扰
有些自定义中间件或者安全中间件可能会修改响应内容,把Toolbar的注入代码去掉。可以临时注释掉非必要的中间件,逐个测试,找出干扰的那个。
内容的提问来源于stack exchange,提问作者planetp

