【问题标题】:django change default runserver portdjango 更改默认运行服务器端口
【发布时间】:2014-07-01 14:09:01
【问题描述】:

我想让manage.py runserver 侦听的默认端口可以在无关的config.ini 中指定。有比在manage.py 中解析sys.argv 并插入配置的端口更简单的解决方法吗?

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

【问题讨论】:

  • 如果您从命令行历史记录运行该命令,那么击键次数会更少。例如。对我来说它是“runs”,它会自动运行与上次相同的命令,因此包括端口等。

标签: python django django-manage.py manage.py


【解决方案1】:

对于 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 &lt;your IP&gt;:&lt;port&gt;

      或者你像这样通过端口

      python manage.py runserver 5000
      

      python manage.py runserver &lt;your port&gt;

      【讨论】:

        【解决方案4】:

        在 Pycharm 中,您可以简单地将端口添加到参数中

        【讨论】:

          【解决方案5】:

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

          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 保存文件”保存文件

          注意:将 .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 成员。将文件另存为您自己的管理命令,例如&lt;app-name&gt;/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 的命令。尝试重命名您的命令,看看它是否被识别。
            • 我把它放在&lt;app_name&gt;/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】:
            1. 在你的 .bashrc 中创建环境变量

              导出 RUNSERVER_PORT=8010

            2. 创建别名

              别名 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 设置中,转到&lt;your python env&gt;\Lib\site-packages\django\core\management\commands\runserver.py 并设置 1.default_port = '&lt;your_port&gt;'
              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”命令时,您将从首选端口开始执行以下操作:

                  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。祝你好运

                  【讨论】:

                  • 这是最糟糕的建议。恕我直言,从分发中编辑文件绝不是一个好主意,并且会导致混乱,因为 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 服务器。请不要将开发服务器作为生产服务器运行...
                  • 这在同时处理多个项目时很有用但不是很好 - 我会接受下面的答案,它指定了用于每个不同项目的端口。只是我的意见。
                  猜你喜欢
                  • 2011-04-19
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-01-18
                  • 1970-01-01
                  • 2014-04-24
                  • 2016-10-02
                  • 2020-09-22
                  相关资源
                  最近更新 更多