Django 开发中何时需要保持开发服务器运行?

在 django 项目开发中,`python manage.py runserver` 仅在需实时预览网页效果时才需保持运行;其余管理命令(如 `makemigrations`、`migrate`、`startapp`、`createsuperuser` 等)均可独立执行,无需服务器处于活动状态。

Django 的 manage.py 是一个功能丰富的命令行工具,其绝大多数管理命令(management commands)是无状态、离线执行的——它们直接操作代码、配置或数据库迁移文件,不依赖 Web 服务进程。例如:

  • ✅ python manage.py startapp learning_logs:仅创建应用目录结构,无需服务器
  • ✅ python manage.py makemigrations learning_logs:扫描 models.py,生成 .py 迁移文件
  • ✅ python manage.py migrate:将迁移文件同步到数据库(需数据库服务可用,但不要求 Django 开发服务器运行
  • ✅ python manage.py createsuperuser:交互式创建管理员账号
  • ✅ python manage.py shell:启动 Django 环境下的 Python 交互终端

而以下命令确实需要服务器上下文或 Web 运行环境,通常需 runserver 启动后才能生效(或本身即用于启动服务):

  • runserver:启动开发服务器(核心依赖)
  • collectstatic:收集静态文件(虽可离线运行,但在部署场景常配合 DEBUG=False 和已启动的服务验证效果)
  • test:部分测试用例可能依赖运行中的视图或中间件逻辑(但单元测试本身不强制要求服务器运行)
  • 自定义命令若显式调用 requests.get('http://127.0.0.1:8000/...') 等,则需服务器已启动

? 关键提醒

  • 开发时建议关闭不必要的 runserver 进程,避免端口占用、资源浪费或误操作(如在服务器运行时重复执行 migrate 可能引发冲突)。
  • 所有数据库相关命令(makemigrations/migrate)操作的是迁移文件和数据库 schema,而非内存中的服务实例,因此与 runserver 完全解耦。
  • 若使用 IDE(如 PyCharm),其内置终端彼此隔离,可放心在不同标签页中分别运行 runserver 和其他命令。

✅ 正确工作流示例(推荐):

# 终端 1:启动开发服务器(长期运行)
$ python manage.py runserver

# 终端 2:新增模型后,生成迁移(无需停服务器)
$ python manage.py makemigrations learning_logs

# 终端 3:应用迁移(同样无需停服务器)
$ python manage.py migrate

# 终端 4:创建超级用户(安全且高效)
$ python manage.py createsuperuser

总之,Django 遵循“关注点分离”原则:服务进程负责 HTTP 请求处理,管理命令负责项目维护。理解这一边界,能让开发更高效、更可控。