我想在一个外部的 config.ini
文件中指定 manage.py runserver
监听的默认端口。是否有更简单的解决方法,而不是在 manage.py
中解析 sys.argv
并插入配置的端口?
目标是每次运行 ./manage.py runserver
时无需指定地址和端口,而是从 config.ini
中获取参数。
我想在一个外部的 config.ini
文件中指定 manage.py runserver
监听的默认端口。是否有更简单的解决方法,而不是在 manage.py
中解析 sys.argv
并插入配置的端口?
目标是每次运行 ./manage.py runserver
时无需指定地址和端口,而是从 config.ini
中获取参数。
#!/bin/bash
exec ./manage.py runserver 0.0.0.0:<your_port>
将其保存为 runserver,与 manage.py 文件放在同一目录下。
chmod +x runserver
并将其作为运行
./runserver
supervisor
来管理,这使得管理变得更加容易。 :-) 但是你的解决方案可能是除了编写专用的 runserver
脚本之外最干净的解决方案。 - jonny截至Django 1.9版本,我发现最简单的解决方案(基于Quentin Stafford-Fraser的解决方案)是在调用runserver
命令之前,在manage.py
中添加几行代码以动态修改默认端口号:
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)
from django.core.management.commands.runserver import Command as runserver; runserver.default_port = "8080
到您的manage.py文件中即可。您还可以使用以下语句更改监听地址:runserver.default_addr
。 - Vargas在运行Django时,以下所有命令都可以更改端口:
python manage.py runserver 127.0.0.1:7000
python manage.py runserver 7000
python manage.py runserver 0:7000
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.py
。我应该在某个地方注册它吗? - physicalattractionrunserver
命令的 Python 模块的位置开始。另外,也许你有另一个应用程序同样注册了名为 runserver
的命令。尝试重命名你的命令并查看是否被识别。 - Feuermurmel<app_name>/management/commands/runserver.py
中,但是Django仍然使用原来的runserver
。当我将其重命名为run_server.py
时,它被识别了。我在你提供的页面上没有看到runserver
有什么特别之处。 - physicalattractionstaticfiles
正是你所建议的。因此,按照你的指示操作会导致在开发中无法提供静态文件服务。最好从django.contrib.staticfiles.management.commands
进行导入。 - x-yuri你可以尝试在manage.py
中添加一个参数,就像这样
python manage.py runserver 0.0.0.0:5000
使用以下命令可启动服务器:
python manage.py runserver <你的IP>:<端口号>
或者您可以像这样指定端口号:
python manage.py runserver 5000
python manage.py runserver
<your port>
from django.core.management.commands.runserver import Command as runserver
runserver.default_port = "8000"
我们创建了一个新的“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
python manage.py runserver <your port>