Django REST API可浏览页面未显示,直接返回JSON数据问题排查求助
看起来你碰到的是Django REST Framework(DRF)默认的可浏览API界面消失、直接返回JSON的问题,我之前也遇到过类似情况,大概率是渲染器配置出了问题,给你梳理下排查思路和解决方案:
核心原因:丢失BrowsableAPIRenderer配置
DRF的红灰配色可浏览界面依赖于BrowsableAPIRenderer渲染器,如果这个渲染器未被配置,API就只会返回JSON格式响应,错误信息也会变成纯文本而非格式化页面。
1. 检查全局DRF配置
首先打开你的settings.py,找到REST_FRAMEWORK配置块,确认DEFAULT_RENDERER_CLASSES包含BrowsableAPIRenderer:
REST_FRAMEWORK = { 'DEFAULT_RENDERER_CLASSES': [ 'rest_framework.renderers.JSONRenderer', # 必须保留这一行,否则可浏览界面会消失 'rest_framework.renderers.BrowsableAPIRenderer', ], # 你的其他DRF配置(认证、权限等) }
如果这个配置块被误删,或者只保留了JSONRenderer,补上BrowsableAPIRenderer即可恢复可浏览界面。
2. 检查视图集的局部渲染器配置
如果全局配置没问题,再检查你的PoliciesViewSet是否自定义了renderer_classes属性,覆盖了默认配置。比如如果视图里有这样的代码:
renderer_classes = [JSONRenderer]
会强制只返回JSON,需要修改为:
renderer_classes = [JSONRenderer, BrowsableAPIRenderer]
不过从你提供的代码来看,视图集里没有这个属性,这一步可以快速排查跳过。
3. 确认DRF已正确安装配置
确保rest_framework已经添加到INSTALLED_APPS中:
INSTALLED_APPS = [ # 其他Django默认APP 'rest_framework', 'rest_framework.authtoken', # 如果你用到了TokenAuthentication,需要加这个 ]
如果没加这个APP,DRF的静态资源(可浏览界面的CSS、JS)无法加载,虽然后果通常是显示无样式HTML而非直接返回JSON,但确认下更稳妥。
4. 验证请求头(可选)
浏览器访问API时,默认会发送Accept: text/html请求头,DRF会根据这个头选择BrowsableAPIRenderer。如果你的浏览器被插件修改了请求头,或者缓存了旧的请求头,可以尝试用隐私模式访问,或者在开发者工具里检查请求头的Accept字段是否包含text/html。
测试验证
修改配置后,重启Django服务器,再访问http://test2.localhost:8000/api/policies/,应该就能看到熟悉的红灰可浏览API界面了。如果还是有问题,可以尝试清除浏览器缓存,或者创建一个不带认证权限的简单测试ViewSet来排除其他因素。
内容的提问来源于stack exchange,提问作者Nothing here

