Windows 开机自动启动 Django 项目

直接 python manage.py runserver 8008 不适合生产,仅适合内网调试;runserver 是开发服务器,性能弱,不能对外公网暴露。

两种方案:任务计划程序(简单,适合调试) 、Windows 服务(后台无窗口,推荐)

方式一:任务计划程序开机自启(最简单,会弹出黑窗口)

1、写启动脚本 start_django.bat

新建文本文档,改后缀为 .bat,编辑内容:

复制代码
@echo off
:: 切换到你的django项目根目录
cd /d E:\code\my_django_project
:: 激活虚拟环境(如果你用venv)
call venv\Scripts\activate.bat
:: 启动,端口8008
python manage.py runserver 0.0.0.0:8008

0.0.0.0:8008 代表允许局域网其他设备访问;只本机访问写 127.0.0.1:8008

保存,测试双击 bat,访问 http://127.0.0.1:8008 确认正常。

2、Windows 任务计划程序设置

  1. Win 搜索:任务计划程序
  2. 创建基本任务
    • 名称:DjangoAutoStart8008
    • 触发器:计算机启动时
    • 操作:启动程序
    • 程序或脚本:选择刚才的 start_django.bat
    • 勾选:不管用户是否登录都要运行 ✅
    • 取消勾选 "不存储密码",勾选最高权限运行
  3. 保存。

缺点:开机弹出 cmd 黑框,关掉窗口 Django 就停止;机器登录后才真正执行。


方式二:Windows 服务运行 Django(无黑窗口,真正后台驻留)

runserver 不适合做服务,改用 waitress 作为 WSGI 服务器。

步骤 1:安装 waitress

复制代码
pip install waitress

步骤 2:项目根目录新建 service_run.py

复制代码
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")

from waitress import serve
from myproject.wsgi import application

# 监听全部网卡,端口8008
serve(application, host="0.0.0.0", port=8008)

把 myproject 替换为自己 Django 项目文件夹名。 测试运行:python service_run.py,访问 8008 确认正常。

步骤 3:用 nssm 把 python 脚本注册成 Windows 系统服务

  1. 下载 nssm(免安装工具),解压

  2. cmd 管理员身份,进入 nssm 的win64目录(32位系统进入win32)执行命令:

    nssm install DjangoService8008

弹出窗口:

  • Path:选择你的 python 解释器路径,例:E:\code\my_django_project\venv\Scripts\python.exe
  • Arguments:service_run.py
  • Startup directory:填 Django 项目根目录 E:\code\my_django_project

设置服务:启动类型 =自动。

复制代码
nssm start DjangoService8008

✅开机就后台自动跑,没有黑窗口,崩溃会自动重启。

NSSM常用命令:

复制代码
nssm start DjangoService8008     #启动
nssm stop DjangoService8008      #停止
nssm restart DjangoService8008   #重启
nssm edit DjangoService8008     #编辑配置界面
nssm remove DjangoService8008 confirm  #删除服务

⚠重要提醒

  1. 防火墙放行端口 8008,否则局域网访问不了。
  2. manage.py runserver 禁止公网直接使用,仅内网调试;正式环境务必用 waitress/gunicorn。
  3. 如果使用虚拟环境,脚本 / 服务里必须使用虚拟环境下的 python.exe,不要用系统 python。

防火墙放行 8008 快速命令(管理员 cmd)

复制代码
netsh advfirewall firewall add rule name="Django8008" dir=in action=allow protocol=TCP localport=8008 profile=any remoteip=any enable=yes
相关推荐
huisheng_qaq1 小时前
【Python基础篇-04】深入理解python的函数、参数与作用域
python·ai·函数·参数作用域
宸津-代码粉碎机6 小时前
OpenAI 连夜迎战 Grok Bot 和 Muse:AI 智能体从 “会聊天” 到 “能办事”,现在入场还来得及吗
java·大数据·人工智能·分布式·python
Y3815326626 小时前
SERP API 计费口径:credits_charged、执行失败扣费与退款边界
python·搜索引擎
噢,我明白了7 小时前
java中唯一键和幂等键的应用
java·后端
GreenTea7 小时前
我把 Agent 的 while 循环拆掉了:一种你可能没想到的 Agent 架构
前端·后端·架构
考虑考虑7 小时前
synchronized字符串常量
java·后端·java ee
蒸鱼Yuzheng8 小时前
设备端性能工件可靠导出:断点续传、哈希、manifest 与失败恢复
android·自动化测试·python·adb·数据完整性
颜进强8 小时前
16 · NestJS LifecycleEvents 生命周期事件:五个钩子、三条边界,和 rag-server 的优雅停机
前端·后端·ai编程
圆圆讲门店9 小时前
挑选同城获客服务机构时需要考量的核心因素都有哪些?
大数据·网络·人工智能·python
GetcharZp9 小时前
定位不再一个个吐坐标:英伟达 LocateAnything 上手全攻略
后端