django 更改默认运行服务器端口
Posted
技术标签:
【中文标题】django 更改默认运行服务器端口【英文标题】:django change default runserver port 【发布时间】:2014-07-01 14:09:01 【问题描述】:我想让manage.py runserver
侦听的默认端口可以在无关的config.ini
中指定。有比在manage.py
中解析sys.argv
并插入配置的端口更简单的解决方法吗?
目标是运行./manage.py runserver
,而不必每次都指定地址和端口,而是让它从config.ini
获取参数。
【问题讨论】:
如果您从命令行历史记录运行该命令,那么击键次数会更少。例如。对我来说它是“对于 Django 3.x,只需更改 settings.py 中的 default_port。像这样:
from decouple import config
import django.core.management.commands.runserver as runserver
runserver.Command.default_port = config('WebServer_Port', default = "8088")
然后,如果你想指定端口,只需在你的 setting.ini 中添加一个新行
[settings]
WebServer_Port=8091
如果不是,删除这个参数。
【讨论】:
【参考方案2】:首先你为应用应用迁移
python manage.py migrate
然后:
python manage.py runserver <your port>
在浏览器中运行 127.0.0.1:(你的端口)
【讨论】:
【参考方案3】:您可以尝试像这样在manage.py
中添加参数
python manage.py runserver 0.0.0.0:5000
python manage.py runserver
<your IP>:<port>
或者你像这样通过端口
python manage.py runserver 5000
python manage.py runserver
<your port>
【讨论】:
【参考方案4】:在 Pycharm 中,您可以简单地将端口添加到参数中
【讨论】:
【参考方案5】:如果您想更改默认配置,请按照以下步骤操作:
打开终端类型命令
$ /usr/local/lib/python<2/3>.x/dist-packages/django/core/management/commands
现在以超级用户身份在 nano 编辑器中打开 runserver.py 文件
$ sudo nano runserver.py
找到'default_port'变量然后你会看到默认端口号是'8000'。现在您可以将其更改为您想要的任何内容。
现在退出并使用“CTRL + X 和 Y 保存文件”保存文件
注意:将 .x 替换为您可用的 python 版本
【讨论】:
【参考方案6】:以下所有命令都可以在运行 django 时更改端口:
python manage.py runserver 127.0.0.1:7000
python manage.py runserver 7000
python manage.py runserver 0:7000
【讨论】:
"目标是运行./manage.py runserver,而不必每次都指定地址和端口"【参考方案7】:创建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
我在这里加载默认的端口表单设置(它会读取其他配置文件),但您也可以直接从其他文件中读取它。
【讨论】:
这似乎是最好的解决方案,但是,我的 Django 1.8.14 无法识别我自己创建的文件runserver.py
。我应该在某个地方注册吗?
@physicalattraction 您的文件可能不在正确的位置。 docs.djangoproject.com/en/2.0/howto/custom-management-commands 首先描述了在哪里放置 runserver
命令的 python 模块。另外,也许您还有另一个应用程序也注册了一个名为runserver
的命令。尝试重命名您的命令,看看它是否被识别。
我把它放在<app_name>/management/commands/runserver.py
,但是后来使用了Django原来的runserver
。当我将其重命名为 run_server.py
时,它被识别。在您链接到的页面上,我没有看到关于 runserver
的任何特别之处。
问题是staticfiles
完全按照您的suggest 行事。因此,按照您的指示会中断在开发中提供静态文件。最好从django.contrib.staticfiles.management.commands
导入。【参考方案8】:
实际上,在开发 Django 服务器中更改(仅)端口的最简单方法是:
python manage.py runserver 7000
应该在http://127.0.0.1:7000/上运行开发服务器
【讨论】:
这个答案是关于更改端口,而不是更改默认端口。 这应该是正确的答案,接受的也意味着IP地址,并且出于某种原因执行manage.py,而不是通过python调用它【参考方案9】:在你的 .bashrc 中创建环境变量
导出 RUNSERVER_PORT=8010
创建别名
别名 runserver='django-admin runserver $RUNSERVER_PORT'
我正在使用 zsh 和 virtualenvs 包装器。我将导出放在项目后激活脚本中,并为每个项目分配端口。
workon someproject
runserver
【讨论】:
【参考方案10】:从 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)
【讨论】:
虽然它没有准确回答原始问题,并且缩进很混乱(代码应该从“import django”开始缩进),但我更喜欢这个答案,因为它是完全独立的并且不需要更改在命令行中输入的内容。 @PurpleDiane 缩进是固定的。 我的 manage.py 看起来并不像那样,我猜 Django 改变了 目前(从 2.0.3 开始)您只需将:from django.core.management.commands.runserver import Command as runserver; runserver.default_port = "8080
添加到您的 manage.py。您也可以更改收听地址:runserver.default_addr
【参考方案11】:
我在同样的问题上苦苦挣扎并找到了一种解决方案。我想它可以帮助你。
当您运行python manage.py runserver
时,它将采用 127.0.0.1 作为默认 IP 地址和 8000 作为默认端口号,可以在您的 python 环境中配置。
在您的 python 设置中,转到<your python env>\Lib\site-packages\django\core\management\commands\runserver.py
并设置
1.default_port = '<your_port>'
2.在def句柄下找到这个并设置if not options.get('addrport'):
self.addr = '0.0.0.0'
self.port = self.default_port
现在,如果您运行“python manage.py runserver”,它将默认在“0.0.0.0:”上运行:
享受编码.....
【讨论】:
修改依赖包的来源被认为是不好的做法。更新/重新安装时更改可能会丢失。 没错@arogachev,这只是一个选项,您可以通过它设置默认端口和主机。但是修改依赖包确实不是一个好习惯。您也可以在命令提示符下运行服务器时设置 IP 和端口。【参考方案12】:我在这里聚会很晚了,但是如果您使用像 PyCharm 这样的 IDE,在“运行”菜单(运行 > 编辑配置)下的“编辑配置”中有一个选项,您可以在其中指定默认端口。这当然只有在您通过 PyCharm 调试/测试时才有意义。
【讨论】:
【参考方案13】:我们创建了一个新的“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
【讨论】:
【参考方案14】:这是一篇旧文章,但对于那些感兴趣的人来说:
如果您想更改默认端口号,那么当您运行“runserver”命令时,您将从首选端口开始执行以下操作:
-
找到您的 python 安装。 (您可以安装多个 python,也可以拥有虚拟环境版本,因此请确保找到正确的版本)
在 python 文件夹中找到 site-packages 文件夹。在里面你会找到你的 django 安装
打开django文件夹->核心->管理->命令
在命令文件夹中,使用文本编辑器打开 runserver.py 脚本
找到 DEFAULT_PORT 字段。默认情况下等于 8000。改成你喜欢的
DEFAULT_PORT = "8080"
重启你的服务器:python manage.py runserver 看看它使用了你设置的端口号
它适用于 python 2.7,但它也应该适用于较新版本的 python。祝你好运
【讨论】:
这是最糟糕的建议。恕我直言,从分发中编辑文件绝不是一个好主意,并且会导致混乱,因为 VCS 不会跟踪更改并且很容易被覆盖。 不建议在站点包中编辑 Django 模块。它可以通过新版本进行更新。它还影响到所有 Django 应用程序。【参考方案15】:使用以下内容创建一个 bash 脚本:
#!/bin/bash
exec ./manage.py runserver 0.0.0.0:<your_port>
将它作为 runserver 保存在与 manage.py 相同的目录中
chmod +x runserver
然后运行它
./runserver
【讨论】:
要么这样,要么我正在考虑添加自定义管理命令。 您不能以编程方式运行开发服务器,因此除非使用call
之类的方式调用shell,否则自定义命令将无法工作。如果此解决方案适合您,请确保将其标记为已解决。
我现在实际上开始使用supervisor
,这使得它更易于管理。 :-) 但是除了编写专用的runserver
脚本之外,您的解决方案可能是最干净的解决方案。
Supervisor 是一个很好的解决方案,我不推荐它来运行开发环境。除其他外,您失去了在终端上拥有服务器输出的优势。如果你真的想使用 supervisor,我的建议是使用 Gunicorn 等功能齐全的 WSGI 服务器。请不要将开发服务器作为生产服务器运行...
这在同时处理多个项目时很有用但不是很好 - 我会接受下面的答案,它指定了用于每个不同项目的端口。只是我的意见。以上是关于django 更改默认运行服务器端口的主要内容,如果未能解决你的问题,请参考以下文章