django更改默认运行服务器端口


128

我想在manage.py runserver侦听器中指定可侦听的默认端口config.ini。是否有比sys.argv在内部解析manage.py并插入配置的端口更容易的修复方法?

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


如果从命令行历史记录中运行命令,则击键次数甚至更少。例如,对我来说,它是“ <ctrl-r> runs <enter>”,它自动运行与上次相同的命令,因此包括端口等。
乔纳森·哈特利

Answers:


175

使用以下命令创建一个bash脚本:

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

将其保存为runserver并与manage.py放在同一目录中

chmod +x runserver

并运行为

./runserver

要么,要么我正在考虑添加自定义管理命令。
2014年

您无法以编程方式运行开发服务器,因此自定义命令将无法正常运行,除非该命令使用诸如的方式调用外壳程序call。如果此解决方案适合您,请确保将其标记为已解决。
Pablo Albornoz 2014年

我实际上supervisor现在开始使用它,这使得管理起来更加容易。:-)但是,除了编写专用的runserver脚本之外,您的解决方案可能是最干净的解决方案。
2014年

Supervisor是一个很好的解决方案,因为我不建议它运行开发环境。您失去了在终端上输出服务器的优势。如果您真的想使用主管,我的建议是将其与功能齐全的WSGI服务器(如Gunicorn)一起使用。请不要将开发服务器用作生产服务器...
Pablo Albornoz

当同时处理多个项目时,这很有用,但效果不佳-我会接受下面的答案,该答案指定了每个不同项目所使用的端口。只是我的意见。

105

实际上,在开发Django服务器中更改(仅)端口的最简单方法是:

python manage.py runserver 7000

应该在http://127.0.0.1:7000/上运行开发服务器的服务器


1
该答案是关于更改端口,而不是更改默认端口。
物理

42

从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 '16

1
@PurpleDiane缩进是固定的。
Flimm

我的manage.py看起来并非如此,我猜Django发生了变化,因为
NaturalBornCamper

6
当前(从2.0.3版本开始),您只需将:添加from django.core.management.commands.runserver import Command as runserver; runserver.default_port = "8080到您的manage.py中。您还可以使用以下方式更改收听地址:runserver.default_addr
Vargas

29

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

python manage.py runserver 127.0.0.1:7000

python manage.py runserver 7000

python manage.py runserver 0:7000

1
“目标是运行./manage.py runserver而不必每次都指定地址和端口”
criptych与Monica站在

11

创建的子类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

@physicalattraction您的文件可能不在正确的位置。docs.djangoproject.com/zh-CN/2.0/howto/custom-management-commands首先介绍该runserver命令的python模块的放置位置。另外,也许您还有另一个应用程序也在注册名为的命令runserver。尝试重命名您的命令,看看它是否被识别。
Feuermurmel

1
我将其放入中<app_name>/management/commands/runserver.py,但随后使用了Django的原始版本runserver。当我将其重命名为时run_server.py,它将被识别。runserver在您链接到的页面上,我看不到任何特别之处。
物理

事情就是staticfiles您所建议的。因此,按照说明进行操作会中断在开发中提供静态文件的时间。最好从导入django.contrib.staticfiles.management.commands
x-yuri

8

我们创建了一个新的“ 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

2

在Pycharm中,您只需将端口添加到参数中

在此处输入图片说明


1

我在这里参加聚会很晚,但是如果您使用PyCharm这样的IDE,则在“运行”菜单下的“编辑配置”中有一个选项(“运行”>“编辑配置”),您可以在其中指定默认端口。当然,这仅在通过PyCharm进行调试/测试时才有意义。


1

如果您想更改默认配置,请按照以下步骤操作:

  1. 打开终端类型命令

     $ /usr/local/lib/python<2/3>.x/dist-packages/django/core/management/commands
  2. 现在以超级用户身份在nano编辑器中打开runserver.py文件

     $ sudo nano runserver.py
  3. 找到“ default_port”变量,您将看到默认端口号为“ 8000”。现在,您可以将其更改为所需的任何内容。

  4. 现在退出并使用“ CTRL + X和Y保存文件”保存文件

注意:将<2/3> .x替换为可用的python版本


0
  1. 在您的.bashrc中创建环境变量

    导出RUNSERVER_PORT = 8010

  2. 建立别名

    别名runserver ='django-admin runserver $ RUNSERVER_PORT'

我正在使用zsh和virtualenvs包装器。我将导出放入项目的postactivate脚本中,并为每个项目分配端口。

workon someproject
runserver

-2

这是旧文章,但对那些感兴趣的人来说:

如果要更改默认端口号,以便在运行“ runserver”命令时从首选端口开始,请执行以下操作:

  1. 找到您的python安装。(您可以安装多个python,也可以安装虚拟环境版本,因此请确保找到正确的版本)
  2. 在python文件夹内找到site-packages文件夹。在其中,您将找到django安装
  3. 打开django文件夹->核心->管理->命令
  4. 在命令文件夹内,使用文本编辑器打开runserver.py脚本
  5. 找到DEFAULT_PORT字段。默认情况下等于8000。更改为您喜欢的任何内容 DEFAULT_PORT = "8080"
  6. 重新启动服务器:python manage.py runserver并查看它是否使用了您设置的端口号

它适用于python 2.7,但也应适用于新版本的python。祝好运


11
这是所有这里最糟糕的建议。恕我直言,从发行版中编辑文件绝不是一个好主意,并且会导致混乱,因为VCS不会跟踪更改,并且很容易将其覆盖。
Feuermurmel

不建议在站点软件包中编辑Django模块。可以通过新版本进行更新。同时也会影响所有Django应用。
Sathindu Kavneth

-3

我在同一个问题上挣扎,找到了一个解决方案。我想它可以帮助您。运行时python manage.py runserver,它将在默认ip地址中使用127.0.0.1,在python环境中配置默认​​端口8000。在您的python设置中,转到<your python env>\Lib\site-packages\django\core\management\commands\runserver.py并设置1。2 default_port = '<your_port>'
.在def handle下找到并设置
if not options.get('addrport'): self.addr = '0.0.0.0' self.port = self.default_port

现在,如果您运行“ python manage.py runserver”,则它将默认在“ 0.0.0.0”上运行:

享受编码.....


3
修改从属软件包的来源被认为是不好的做法。更改可能会在更新/重新安装时丢失。
arogachev '02

没错,@ arogachev,这只是您可以设置默认端口和主机的选项。但是修改依赖包确实不是一个好习惯。您也可以在命令提示符下运行服务器时设置IP和端口。
Amrendra
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.