能直接调试DRF视图的关键在于launch.json使用"module": "django"而非"program",配合--noreload、显式DJANGO_SETTINGS_MODULE、正确PYTHONPATH与extraPaths配置,确保django.setup()执行和模块导入正常,从而完整加载REST_FRAMEWORK配置、解析器与渲染器。

能直接调试 DRF 视图、看到请求/响应结构、断点进序列化器和视图集——关键不在装插件,而在 launch.json 和 PYTHONPATH 的组合是否让 VSCode 真正“理解” Django 的模块加载逻辑。
launch.json 必须用 "module": "django",不能用 "program"
VSCode 默认把 manage.py 当普通脚本跑,但 DRF 的 APIView、ViewSet 依赖 Django 命令系统初始化配置(比如 REST_FRAMEWORK 全局设置、认证后端、渲染器)。用 "program": "./manage.py" 启动,request 对象里可能没有 accepted_renderer,断点进 get_serializer() 会卡在 import 或空对象上。
-
"module": "django"强制走 Django 的命令入口,确保django.setup()被调用、所有 app 配置加载完毕 -
"args"至少包含["runserver", "--noreload", "8000"]:--noreload 是必须的,否则子进程 fork 后断点失效 -
"env"中必须显式设DJANGO_SETTINGS_MODULE,比如"DJANGO_SETTINGS_MODULE": "backend.settings"(替换成你实际路径)
PYTHONPATH 和 extraPaths 要补全项目根与 apps 目录
DRF 的 serializers.py 或 views.py 经常跨 app import,比如 from myapp.serializers import UserSerializer。VSCode 不自动把 ./myapp 加进 Python path,就会报 ModuleNotFoundError,哪怕终端里 python manage.py runserver 能跑通。
- 在
launch.json的"env"里加"PYTHONPATH": "${workspaceFolder}",覆盖默认路径 - 同时在
.vscode/settings.json中加"python.autoComplete.extraPaths",值为["./backend", "./myapp"](backend 是你的 settings 所在包,myapp 是具体 app) - 如果用了
src/结构(比如src/backend/settings.py),PYTHONPATH得写成"${workspaceFolder}/src"
调试 DRF API 时 request.data 和 response.data 看不到?检查 renderer 和 parser
你在视图里打了断点,request.data 是 None,或 response.data 是原始字典而非 JSON 字符串——这不是代码错,是 VSCode 调试器没触发 DRF 的解析/渲染链。常见于没启用对应 parser 或 renderer。
- 确认
settings.py中REST_FRAMEWORK包含'DEFAULT_PARSER_CLASSES'和'DEFAULT_RENDERER_CLASSES',至少要有'rest_framework.parsers.JSONParser'和'rest_framework.renderers.JSONRenderer' - 发请求时用 curl 或 Postman 显式带
Content-Type: application/json,别依赖浏览器地址栏直输 URL(那发的是 GET,没 body) - 在视图里加一行
print(type(request)),如果是rest_framework.request.Request而不是django.http.HttpRequest,说明 DRF 已接管;否则检查urls.py是否用了include('rest_framework.urls')或路由是否匹配
静态文件 + DRF Browsable API 404?urls.py 漏了 staticfiles_urlpatterns()
访问 http://127.0.0.1:8000/api-auth/login/ 或自定义的 DRF 路由,页面打开但 CSS/JS 报 404,控制台提示 GET /static/rest_framework/css/bootstrap.min.css HTTP/1.1" 404——这跟 DRF 无关,是 Django 开发服务器没被授权托管静态资源。
- 只在
DEBUG = True下有效,且必须在主urls.py末尾加上:urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) - 别漏掉
from django.conf.urls.static import static和from django.conf import settings - 如果用了
django.contrib.staticfiles,还要确认INSTALLED_APPS里有它,且python manage.py collectstatic --noinput在开发时非必须,但路径配置要对
最易被忽略的是:launch.json 里 "env" 缺少 PYTHONPATH 导致 DRF 模块导入失败,而错误被静默吞掉,只表现为断点不亮、request.data 为空——这种问题不会抛异常,只会让你反复怀疑代码逻辑。


















