django изменить порт сервера запуска по умолчанию

131

Я хотел бы сделать порт по умолчанию, который manage.py runserverслушает, определяемым посторонним config.ini. Есть ли что-то более простое решение, чем разбор sys.argvвнутри manage.pyи вставка настроенного порта?

Цель состоит в том, чтобы запускаться ./manage.py runserverбез необходимости каждый раз указывать адрес и порт, но заставляя его принимать аргументы из config.ini.

Jonny
источник
Если вы запустите команду из истории командной строки, нажатий клавиш станет еще меньше. Например, для меня это «<ctrl-r> запускает <enter>», и он автоматически запускает ту же команду, что и в прошлый раз, поэтому включен порт и т.д.
Джонатан Хартли,

Ответы:

177

создайте сценарий bash со следующим:

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

сохраните его как runserver в том же каталоге, что и manage.py

chmod +x runserver

и запустите его как

./runserver
Пабло Альборнос
источник
Либо так, либо я подумываю добавить собственную команду управления.
Джонни
Вы не можете запустить сервер разработки программно, поэтому пользовательская команда не будет работать, если она не вызовет оболочку, используя что-то вроде call. Если это решение работает для вас, обязательно отметьте его как решенное.
Пабло Альборнос
На самом деле я начал использовать supervisorдля этого сейчас, что упрощает управление. :-) Но ваше, вероятно, самое чистое решение, кроме написания специального runserverскрипта.
Джонни
Supervisor - хорошее решение, потому что я бы не рекомендовал запускать среду разработки. Вы теряете, среди прочего, преимущество вывода сервера на терминал. Если вы действительно хотите использовать супервизор, я бы посоветовал использовать его с полнофункциональным сервером WSGI, таким как Gunicorn. Пожалуйста, не запускайте сервер разработки в качестве рабочего сервера ...
Пабло Альборнос
Это полезно, но не очень удобно при одновременном манипулировании несколькими проектами - я бы принял ответ ниже, в котором указывается порт, который будет использоваться для каждого отдельного проекта. Просто мое мнение.
105

На самом деле самый простой способ изменить (только) порт в разработке сервера Django выглядит так:

python manage.py runserver 7000

который должен запускать сервер разработки на http://127.0.0.1:7000/

QBack
источник
2
Этот ответ касается изменения порта, а не порта по умолчанию.
Physicalattraction
42

Начиная с Django 1.9, самое простое решение, которое я нашел (на основе решения Квентина Стаффорда-Фрейзера), - это добавить несколько строк, в 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)
BillyBBone
источник
Хотя он не дает точного ответа на исходный вопрос и отступы испорчены (код должен быть с отступом от «import django» вниз), я предпочитаю этот ответ, потому что он полностью самодостаточен и не требует изменения введенного в командной строке.
PurpleDiane
1
@PurpleDiane Отступы исправлены.
Flimm
Мой manage.py на самом деле не выглядит так, я думаю, с тех пор Django изменился
NaturalBornCamper
6
В настоящее время (начиная с from django.core.management.commands.runserver import Command as runserver; runserver.default_port = "8080версии 2.0.3) вы можете просто добавить: в свой manage.py. Вы также можете изменить адрес прослушивания с помощью:runserver.default_addr
Варгас
30

Все следующие команды позволяют изменить порт во время работы 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 без необходимости каждый раз указывать адрес и порт»
JuSTMOnIcAjUSTmONiCAJusTMoNICa
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

Я загружаю здесь настройки формы порта по умолчанию (которые, в свою очередь, читают другие файлы конфигурации), но вы также можете напрямую прочитать их из другого файла.

Feuermurmel
источник
Это кажется лучшим решением, однако мой Django 1.8.14 не распознает созданный мной файл runserver.py. Где-то прописать?
Physicalattraction
@physicalattraction Вероятно, ваш файл находится не в нужном месте. docs.djangoproject.com/en/2.0/howto/custom-management-commands начинается с описания того, где разместить модуль python для runserverкоманды. Также, возможно, у вас есть другое приложение, также регистрирующее команду с именем runserver. Попробуйте переименовать свою команду и посмотрите, распознается ли она.
Feuermurmel
1
Вставляю <app_name>/management/commands/runserver.py, но потом используется оригинал Django runserver. Когда я переименовываю его в run_server.py, он распознается. Я не вижу ничего особенного runserverна странице, на которую вы ссылаетесь.
Physicalattraction
Дело в том, что он staticfilesделает именно то, что вы предлагаете . Таким образом, следование вашим инструкциям нарушает работу статических файлов в разработке. Лучше всего импортировать из django.contrib.staticfiles.management.commands.
x-
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 вы можете просто добавить порт в параметры

введите описание изображения здесь

chaggy
источник
1

Я очень опаздываю на вечеринку, но если вы используете IDE, такую ​​как PyCharm, в меню «Выполнить» («Выполнить»> «Изменить конфигурации») есть опция «Изменить конфигурации», где вы можете указать порт по умолчанию. Это, конечно, актуально, только если вы отлаживаете / тестируете через PyCharm.

Смитти
источник
1

Если вы хотите изменить конфигурации по умолчанию, выполните следующие действия:

  1. Открыть команду типа терминала

     $ /usr/local/lib/python<2/3>.x/dist-packages/django/core/management/commands
  2. Теперь откройте файл runserver.py в редакторе nano как суперпользователь.

     $ sudo nano runserver.py
  3. найдите переменную default_port, тогда вы увидите, что номер порта по умолчанию - 8000. Теперь вы можете изменить его на все, что захотите.

  4. Теперь выйдите и сохраните файл, используя «CTRL + X и Y, чтобы сохранить файл».

Примечание. Замените <2/3> .x используемой версией python.

rhoitjadhav
источник
0
  1. Создайте переменную окружения в вашем .bashrc

    экспорт RUNSERVER_PORT = 8010

  2. Создать псевдоним

    псевдоним runserver = 'django-admin runserver $ RUNSERVER_PORT'

Я использую оболочку zsh и virtualenvs. Я помещаю экспорт в проекты postactivate script и назначаю порт для каждого проекта.

workon someproject
runserver
Pavel1114
источник
-2

Это старый пост, но для тех, кому интересно:

Если вы хотите изменить номер порта по умолчанию, чтобы при запуске команды "runserver" вы начинали с предпочитаемого порта, сделайте следующее:

  1. Найдите свою установку 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
Это худшее предложение из всех здесь. IMHO, редактирование файла из дистрибутива никогда не является хорошей идеей и приводит к путанице, потому что изменение не отслеживается VCS и легко перезаписывается.
Feuermurmel
Не рекомендуется редактировать модуль Django в пакетах сайта. Может быть обновлен до новой версии. Также это влияет на все приложения Django.
Сатинду Кавнет
-3

Я боролся с той же проблемой и нашел одно решение. Думаю, это может тебе помочь. при запуске 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:

Наслаждайтесь кодированием .....

Amrendra
источник
3
Изменение источников зависимых пакетов считается плохой практикой. Изменения могут быть потеряны при обновлении / переустановке.
арогачев 01
Правильно @arogachev, это просто опция, с помощью которой вы можете сделать порт и хост по умолчанию. Но на самом деле изменять зависимые пакеты не рекомендуется. вы также можете установить IP-адрес и порт при запуске сервера в командной строке.
Амрендра