vscode调试django失败主因是解释器、launch.json启动方式与环境变量三者未对齐;须选虚拟环境解释器、launch.json设"module":"django"及"--noreload"、硬编码"django_settings_module"、补全settings.json中managepypath和settingsmodule。

VSCode 调试 Django 后端项目失败,90% 是因为解释器、launch.json 启动方式、环境变量三者没对齐——不是代码写错了,是调试器根本没进 Django 的命令生命周期。
Python 解释器必须选中虚拟环境里的 python 可执行文件
VSCode 不继承你终端里激活的环境,它只认你手动点选的那个路径。选错解释器,import django 就会报红线,ModuleNotFoundError: No module named 'django' 是最直接信号。
- 按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入并选择Python: Select Interpreter - 从列表中只选带
venv或env字样的路径,例如:./venv/bin/python(Linux/macOS)或.\venv\Scripts\python.exe(Windows) - 别选
/usr/bin/python3、C:\Python312\python.exe这类系统级路径——Django 很可能不在那里 - 选完后看窗口右下角是否显示该路径;再打开任意
.py文件,悬停from django.conf import settings确认无红线
launch.json 必须用 "module": "django",不能用 "program"
用 "program": "./manage.py" 启动,VSCode 会把它当普通脚本执行,跳过 Django 命令注册逻辑。结果就是断点不命中、request.data 是 None、DRF 渲染器没加载——因为 django.setup() 根本没被调用。
提供使用 django-unfold (v0.56+) 构建高级 Django 管理界面的专业指导。当用户提及 django-unfold、unfold admin 等内容时使用此技能。
- 在项目根目录建
.vscode/launch.json,配置中必须含:"module": "django" -
"args"至少为["runserver", "--noreload"]:去掉--noreload会导致 Django fork 子进程,VSCode 只附着在主进程,断点失效 -
"env"中硬编码"DJANGO_SETTINGS_MODULE": "myproject.settings"(替换成你实际模块路径),不能依赖默认值 - 加
"django": true,否则调试器不启用 Django 特有支持(如请求对象展开、模板上下文)
静态文件 404 或 DRF request.data 读不到?检查 urls.py 和 settings.py 配置时机
开发阶段静态文件返回 404,不是 STATIC_URL 写错了,而是 urls.py 没显式注册;request.data 为空,常因 DRF 的 JSONParser 没生效,或 REST_FRAMEWORK 配置读得太早。
- 确认主
urls.py中有这段(仅限DEBUG=True):urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) - 检查
settings.py中REST_FRAMEWORK是否定义了'DEFAULT_PARSER_CLASSES'和'DEFAULT_RENDERER_CLASSES',至少包含'rest_framework.parsers.JSONParser' - 避免在模块顶层(比如
views.py开头)就调用os.getenv('DEBUG')——此时 Django 配置尚未加载,应改用settings.DEBUG
settings.json 补全 managePyPath 和 settingsModule 才能启用完整 Django 支持
光有 launch.json 不够。VSCode 不自动识别 Django 项目结构,Run Server 按钮灰掉、{% url %} 点不进去、跳转不到 models.py,基本都是这里漏配。
- 在工作区根目录的
.vscode/settings.json中加入:"python.django.managePyPath": "./manage.py" -
"python.django.settingsModule": "myproject.settings"(必须是 Python 模块路径,不是文件路径) -
managePyPath必须是相对路径;如果manage.py在子目录(如src/manage.py),就得写成"./src/manage.py" - 如果
settingsModule错了,调试时INSTALLED_APPS为空,中间件、静态路由、认证后端全失效
最容易被忽略的是:manage.py 本身不是执行入口,真正处理请求的是 django.core.servers.basehttp 启动的线程——所以断点必须落在 views.py、serializers.py 这类业务文件里,而不是 manage.py 里。










