django змінити стандартний порт runserver


129

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

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


Якщо ви запускаєте команду з історії свого командного рядка, то це ще менше натискань клавіш. Наприклад, для мене це "<ctrl-r> запускає <enter>", і він автоматично виконує ту саму команду, що і минулого разу, тому порт і т.д. включений.
Джонатан Хартлі

Відповіді:


176

створити bash-скрипт із наступним:

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

збережіть його як runserver в тому ж режимі, що і manage.py

chmod +x runserver

і запустити його як

./runserver

Або це, або я думаю про додавання користувацької команди управління.
jonny

Ви не можете запустити сервер розробки програмно, тому спеціальна команда не працюватиме, якщо вона не викликає оболонку, використовуючи щось подібне call. Якщо це рішення працює для вас, будь ласка, обов'язково позначте його як вирішене.
Пабло Альборноз

Я фактично почав використовувати supervisorдля цього зараз, що робить його ще простіше в управлінні. :-) Але ваше, мабуть, найчистіше рішення, крім написання виділеного runserverсценарію.
Джоні

Supervisor - це гарне рішення, тому я б не рекомендував його запускати середовище розробки. Ви втрачаєте перевагу того, що сервер виводить на термінал, серед іншого. Якщо ви дійсно хочете скористатись супервізором, моя порада буде використовувати його з повнофункціональним сервером WSGI, як Gunicorn. Будь ласка, не запускайте сервер розробки як свій виробничий сервер ...
Пабло Альборноз

Це корисно, але не смакувати, коли жонглювати декількома проектами одночасно - я б прийняв відповідь нижче, яка визначає порт, який слід використовувати для кожного окремого проекту. Просто моя думка.

105

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

python manage.py runserver 7000

який повинен запустити сервер розробки на http://127.0.0.1:7000/


2
Ця відповідь стосується зміни порту, а не зміни порту за замовчуванням.
фізичне

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)

Хоча воно не відповідає точно на початкове запитання, а відступ заплутано (код має бути відступ від "імпортувати django" вниз), я віддаю перевагу цій відповіді, оскільки вона є повністю автономною і не вимагає змінити те, що вводиться в командному рядку.
PurpleDiane

1
@PurpleDiane Відступ зафіксовано.
Flimm

Мій менеджер.py насправді не схожий на це, я думаю, Джанго змінився з тих пір
NaturalBornCamper

6
Наразі (станом на 2.0.3) ви можете просто додати: from django.core.management.commands.runserver import Command as runserver; runserver.default_port = "8080у ваш manage.py. Ви також можете змінити адресу прослуховування за допомогою:runserver.default_addr
Варгас


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/en/2.0/howto/custom-management-commands починається з опису, куди слід поставити модуль python для runserverкоманди. Також, можливо, у вас є ще одна програма, яка також реєструє команду з назвою runserver. Спробуйте перейменувати свою команду і подивіться, чи вона розпізнана.
Фейермурмель

1
Я вклав це <app_name>/management/commands/runserver.py, але тоді використовується оригінал Джанго 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


1

Я дуже спізнюся на вечірку тут, але якщо ви використовуєте IDE, подібний PyCharm, в меню "Виконати" (Виконати> Редагувати конфігурації) в меню "Виконати" (Виконати> Редагувати конфігурації) є пункт "Редагувати конфігурації", де ви можете вказати порт за замовчуванням. Це звичайно актуально, лише якщо ви налагоджуєте / тестуєте через PyCharm.


1

Якщо ви хочете змінити конфігурації за замовчуванням, виконайте наступні дії:

  1. Відкрити команду типу терміналу

     $ /usr/local/lib/python<2/3>.x/dist-packages/django/core/management/commands
  2. Тепер відкрийте файл 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. Я розміщую експорт у проекти післяcактиваційного скрипту та порт призначення для кожного проекту.

workon someproject
runserver

-2

Це стара публікація, але для тих, хто цікавиться:

Якщо ви хочете змінити номер порту за замовчуванням, тож при запуску команди "runserver" ви починаєте з уподобаного порту:

  1. Знайдіть установку python. (у вас може бути встановлено кілька пітонів, і ви також можете мати свою версію віртуальної обстановки, тому переконайтесь, що ви знайдете потрібну)
  2. Всередині папки python знайдіть папку site-пакети. Всередині ви знайдете свою установку джанго
  3. Відкрийте папку django-> core -> management -> команди
  4. Всередині папки команд відкрийте сценарій runserver.py з текстовим редактором
  5. Знайдіть поле DEFAULT_PORT. вона дорівнює 8000 за замовчуванням. Змініть його на все, що вам подобається DEFAULT_PORT = "8080"
  6. Перезавантажте ваш сервер: python Manag.py runserver і переконайтеся, що він використовує встановлений номер порту

Він працює з python 2.7, але він також повинен працювати з новішими версіями python. Удачі


11
Це найгірша пропозиція з усіх тут. IMHO, редагування файлу з дистрибутива ніколи не є хорошою ідеєю і призводить до плутанини, оскільки зміна не відстежується VCS і легко перезаписується.
Feuermurmel

Не рекомендується редагувати модуль Django на пакунках сайту. Його можна оновити новою версією. Також це впливає на всі програми Django.
Сатінду Кавнет

-3

Я боровся з тією ж проблемою і знайшов одне рішення. Я думаю, це може вам допомогти. коли ви запускаєте python manage.py runserver, це буде брати 127.0.0.1 як ip-адресу за замовчуванням та 8000 як номер порту за замовчуванням, який можна налаштувати у вашому середовищі 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 Manag.py runserver", він запускається за замовчуванням на "0.0.0.0:

Насолоджуйтесь кодування .....


3
Модифікація джерел залежних пакетів вважається поганою практикою. Зміни можуть бути втрачені під час оновлення / перевстановлення.
arogachev

Це правильно @arogachev, Це лише варіант, за допомогою якого ви можете зробити порт і хост за замовчуванням. Але насправді не є хорошою практикою змінювати залежні пакети. Ви можете встановити IP та порт під час запуску сервера в командному рядку.
Amrendra
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.