我想在一个多余的config.ini中指定manage.py runserver侦听的默认端口。有没有比解析sys. exe更简单的解决方案?在manage.py和插入配置端口Argv ?

目标是运行./manage.py runserver,而不必每次都指定地址和端口,而是让它从config.ini中获取参数。


当前回答

创建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

我在这里加载默认的端口表单设置(它反过来读取其他配置文件),但您也可以直接从其他文件读取它。

其他回答

我们创建了一个新的“runserver”管理命令,它是标准命令的精简包装,但改变了默认端口。粗略地说,你创建management/commands/runserver.py并放入如下内容:

# Override the value of the constant coded into django...
import django.core.management.commands.runserver as runserver
runserver.DEFAULT_PORT="8001"

# ...print out a warning...
# (This gets output twice because runserver fires up two threads (one for autoreload).
#  We're living with it for now :-)
import os
dir_path = os.path.splitext(os.path.relpath(__file__))[0]
python_path = dir_path.replace(os.sep, ".")
print "Using %s with default port %s" % (python_path, runserver.DEFAULT_PORT)

# ...and then just import its standard Command class.
# Then manage.py runserver behaves normally in all other regards.
from django.core.management.commands.runserver import Command

我在这里很晚了,但如果你使用像PyCharm这样的IDE,在“运行”菜单下的“编辑配置”中有一个选项(运行>编辑配置),在那里你可以指定一个默认端口。当然,这只适用于通过PyCharm进行调试/测试。

在你的项目manage.py文件中添加

from django.core.management.commands.runserver import Command as runserver

然后在def main()中:

runserver.default_port = "8001" 

从Django 1.9开始,我找到的最简单的解决方案(基于Quentin stford - 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)

在上一个版本的Django(目前:4.0.3)中,你可以在settings.py文件中添加这些行


from django.core.management.commands.runserver import Command as runserver
runserver.default_port = "8000"