Django 更改默认的 runserver 端口

229 投票
19 回答
361579 浏览
提问于 2025-04-18 06:26

我想让 manage.py runserver 默认监听的端口可以在一个额外的 config.ini 文件中指定。有没有比在 manage.py 里解析 sys.argv 并插入配置的端口更简单的解决办法?

我的目标是运行 ./manage.py runserver 时,不用每次都指定地址和端口,而是直接从 config.ini 文件中获取这些参数。

19 个回答

14

创建一个 django.core.management.commands.runserver.Command 的子类,并重写 default_port 这个成员。把这个文件保存为你自己的管理命令,比如放在 <app-name>/management/commands/runserver.py 这个路径下:

from django.conf import settings
from django.core.management.commands import runserver

class Command(runserver.Command):
    default_port = settings.RUNSERVER_PORT

在这里,我是从设置中加载默认端口的(而设置又会读取其他配置文件),不过你也可以直接从其他文件中读取这个端口。

45

以下所有命令都可以在运行Django时更改端口:

python manage.py runserver 127.0.0.1:7000

python manage.py runserver 7000

python manage.py runserver 0:7000
67

从Django 1.9开始,我找到的最简单的解决办法(基于Quentin Stafford-Fraser的方案)是,在manage.py文件中添加几行代码,这样可以在运行runserver命令之前,动态地修改默认的端口号:

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings.dev")

    import django
    django.setup()

    # Override default port for `runserver` command
    from django.core.management.commands.runserver import Command as runserver
    runserver.default_port = "8080"

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)
217

其实,改变开发环境中Django服务器的端口,最简单的方法就是这样做:

python manage.py runserver 7000

这样就可以在 http://127.0.0.1:7000/ 上运行开发服务器了。

270

创建一个bash脚本,内容如下:

#!/bin/bash
exec ./manage.py runserver 0.0.0.0:<your_port>

把这个脚本保存为runserver,放在和manage.py同一个文件夹里。

chmod +x runserver

然后用下面的方式运行它:

./runserver

撰写回答