django Standard-Runserver-Port ändern


128

Ich möchte den Standardport, der manage.py runserverabhört, in einem fremden Bereich spezifizierbar machen config.ini. Gibt es eine einfachere fix als Parsen sys.argvinnerhalb manage.pyund den konfigurierten Anschluss stecken?

Das Ziel ist es, ausgeführt zu werden, ./manage.py runserverohne jedes Mal Adresse und Port angeben zu müssen, aber die Argumente aus dem zu übernehmen config.ini.


Wenn Sie den Befehl über Ihren Befehlszeilenverlauf ausführen, sind noch weniger Tastenanschläge erforderlich. Für mich ist es beispielsweise "<ctrl-r> führt <enter> aus" und es wird automatisch der gleiche Befehl wie beim letzten Mal ausgeführt, sodass der Port usw. enthalten ist.
Jonathan Hartley

Antworten:


175

Erstellen Sie ein Bash-Skript mit den folgenden Angaben:

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

Speichern Sie es als Runserver im selben Verzeichnis wie manage.py

chmod +x runserver

und führen Sie es als

./runserver

Entweder das, oder ich denke darüber nach, einen benutzerdefinierten Verwaltungsbefehl hinzuzufügen.
Jonny

Sie können den Entwicklungsserver nicht programmgesteuert ausführen, daher funktioniert ein benutzerdefinierter Befehl nur, wenn er die Shell mit so etwas wie aufruft call. Wenn diese Lösung für Sie funktioniert, markieren Sie sie bitte als gelöst.
Pablo Albornoz

Ich supervisorhabe jetzt angefangen, dies zu verwenden, was die Verwaltung noch einfacher macht. :-) Aber deine ist wahrscheinlich die sauberste Lösung, außer ein dediziertes runserverSkript zu schreiben .
Jonny

Supervisor ist eine gute Lösung, da ich es nicht empfehlen würde, die Entwicklungsumgebung auszuführen. Sie verlieren unter anderem den Vorteil, dass der Server auf dem Terminal ausgegeben wird. Wenn Sie Supervisor wirklich verwenden möchten, würde ich empfehlen, ihn mit einem voll funktionsfähigen WSGI-Server wie Gunicorn zu verwenden. Bitte führen Sie den Entwicklungsserver nicht als Ihren Produktionsserver aus ...
Pablo Albornoz

Dies ist nützlich, aber nicht großartig, wenn mehrere Projekte gleichzeitig jongliert werden. Ich hätte die folgende Antwort akzeptiert, in der der Port angegeben ist, der für jedes einzelne Projekt verwendet werden soll. Nur meine Meinung tho.

105

Der einfachste Weg, den (einzigen) Port in der Entwicklung eines Django-Servers zu ändern, ist wie folgt:

python manage.py runserver 7000

Das sollte den Entwicklungsserver unter http://127.0.0.1:7000/ ausführen.


1
Bei dieser Antwort geht es darum, den Port zu ändern, nicht den Standardport.
körperliche

42

Ab Django 1.9 besteht die einfachste Lösung, die ich gefunden habe (basierend auf der Lösung von Quentin Stafford-Fraser), darin, einige Zeilen hinzuzufügen, in manage.pydenen die Standardportnummer dynamisch geändert wird, bevor der runserverBefehl aufgerufen wird :

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)

Obwohl die ursprüngliche Frage nicht genau beantwortet wird und der Einzug durcheinander ist (Code sollte ab "import django" nach unten eingerückt werden), bevorzuge ich diese Antwort, da sie vollständig in sich geschlossen ist und keine Änderung der eingegebenen Daten erfordert in der Kommandozeile.
PurpleDiane

1
@PurpleDiane Der Einzug ist behoben.
Flimm

Meine manage.py sieht nicht wirklich so aus, ich denke, Django hat sich seitdem geändert
NaturalBornCamper

6
Derzeit (ab 2.0.3) können Sie einfach hinzufügen: from django.core.management.commands.runserver import Command as runserver; runserver.default_port = "8080zu Ihrer manage.py. Sie können die Höradresse auch ändern mit:runserver.default_addr
Vargas

29

Mit allen folgenden Befehlen können Sie den Port ändern, während Sie django ausführen:

python manage.py runserver 127.0.0.1:7000

python manage.py runserver 7000

python manage.py runserver 0:7000

1
"Das Ziel ist es, ./manage.py runserver auszuführen, ohne jedes Mal Adresse und Port angeben zu müssen"
Criptych steht mit Monica am

11

Erstellen Sie eine Unterklasse django.core.management.commands.runserver.Commandund überschreiben Sie das default_portMitglied. Speichern Sie die Datei als eigenen Verwaltungsbefehl, z. B. unter <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

Ich lade hier die Standardeinstellungen für das Portformular (die wiederum andere Konfigurationsdateien lesen), aber Sie können sie genauso gut direkt aus einer anderen Datei lesen.


Dies scheint die beste Lösung zu sein, mein Django 1.8.14 erkennt jedoch meine selbst erstellte Datei nicht runserver.py. Soll ich es irgendwo registrieren?
körperliche

@physicalattraction Ihre Datei befindet sich wahrscheinlich nicht am richtigen Speicherort. docs.djangoproject.com/de/2.0/howto/custom-management-commands beginnt mit einer Beschreibung, wo das Python-Modul für den runserverBefehl abgelegt werden soll . Auch haben Sie vielleicht eine andere App auch einen Befehl namens Registrierung runserver. Versuchen Sie, Ihren Befehl umzubenennen, und prüfen Sie, ob er erkannt wird.
Feuermurmel

1
Ich habe es reingelegt <app_name>/management/commands/runserver.py, aber dann wird Djangos Original runserververwendet. Wenn ich es umbenenne, run_server.pywird es erkannt. Ich sehe runserverauf der Seite, auf die Sie verlinken, nichts Besonderes .
körperliche

Die Sache staticfilesmacht genau das, was Sie vorschlagen . Wenn Sie also Ihren Anweisungen folgen, wird die Bereitstellung statischer Dateien in der Entwicklung unterbrochen. Es ist am besten, aus zu importieren django.contrib.staticfiles.management.commands.
X-Yuri

8

Wir haben einen neuen 'runserver'-Verwaltungsbefehl erstellt, der einen dünnen Wrapper um den Standardbefehl darstellt, aber den Standardport ändert. Sie erstellen ungefähr so management/commands/runserver.pyetwas:

# 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

In Pycharm können Sie den Port einfach zu den Parametern hinzufügen

Geben Sie hier die Bildbeschreibung ein


1

Ich bin sehr spät zur Party hier, aber wenn Sie eine IDE wie PyCharm verwenden, gibt es unter "Konfigurationen bearbeiten" im Menü "Ausführen" (Ausführen> Konfigurationen bearbeiten) eine Option, mit der Sie einen Standardport angeben können. Dies ist natürlich nur relevant, wenn Sie über PyCharm debuggen / testen.


1

Wenn Sie die Standardkonfigurationen ändern möchten, gehen Sie folgendermaßen vor:

  1. Öffnen Sie den Befehl terminal type

     $ /usr/local/lib/python<2/3>.x/dist-packages/django/core/management/commands
  2. Öffnen Sie nun die Datei runserver.py im Nano-Editor als Superuser

     $ sudo nano runserver.py
  3. Suchen Sie die Variable 'default_port', dann sehen Sie, dass die Standardportnummer '8000' ist. Jetzt können Sie es nach Belieben ändern.

  4. Beenden Sie die Datei und speichern Sie sie mit "STRG + X und Y, um die Datei zu speichern".

Hinweis: Ersetzen Sie <2/3> .x durch Ihre verwendbare Python-Version


0
  1. Erstellen Sie eine Umgebungsvariable in Ihrer .bashrc

    export RUNSERVER_PORT = 8010

  2. Alias ​​erstellen

    alias runserver = 'django-admin runserver $ RUNSERVER_PORT'

Ich benutze zsh und virtualenvs wrapper. Ich habe den Export in Projekte gesetzt, um das Skript zu aktivieren und den Port für jedes Projekt zuzuweisen.

workon someproject
runserver

-2

Dies ist ein alter Beitrag, aber für diejenigen, die interessiert sind:

Wenn Sie die Standardportnummer ändern möchten, starten Sie beim Ausführen des Befehls "runserver" mit Ihrem bevorzugten Port:

  1. Finden Sie Ihre Python-Installation. (Sie können mehrere Pythons installieren und auch Ihre virtuelle Umgebungsversion. Stellen Sie also sicher, dass Sie die richtige finden.)
  2. Suchen Sie im Python-Ordner den Site-Packages-Ordner. Darin finden Sie Ihre Django-Installation
  3. Öffnen Sie den Befehl django folder-> core -> management ->
  4. Öffnen Sie im Befehlsordner das Skript runserver.py mit einem Texteditor
  5. Suchen Sie das Feld DEFAULT_PORT. Standardmäßig ist es 8000. Ändern Sie es nach Belieben DEFAULT_PORT = "8080"
  6. Starten Sie Ihren Server neu: python manage.py runserver und stellen Sie sicher, dass er Ihre festgelegte Portnummer verwendet

Es funktioniert mit Python 2.7, sollte aber auch mit neueren Versionen von Python funktionieren. Viel Glück


11
Dies ist der schlechteste Vorschlag von allen hier. IMHO ist das Bearbeiten einer Datei aus einer Distribution niemals eine gute Idee und führt zu Verwirrung, da die Änderung nicht von einem VCS verfolgt wird und leicht überschrieben wird.
Feuermurmel

Es wird nicht empfohlen, das Django-Modul in den Site-Paketen zu bearbeiten. Es kann durch eine neue Version aktualisiert werden. Auch betrifft es alle Django-Apps.
Sathindu Kavneth

-3

Ich hatte mit dem gleichen Problem zu kämpfen und fand eine Lösung. Ich denke, es kann dir helfen. Wenn Sie ausführen python manage.py runserver, wird 127.0.0.1 als Standard-IP-Adresse und 8000 als Standard-Portnummer verwendet, die in Ihrer Python-Umgebung konfiguriert werden kann. Gehen Sie in Ihrer Python-Einstellung zu <your python env>\Lib\site-packages\django\core\management\commands\runserver.pyund setzen Sie 1. default_port = '<your_port>'
2. Finden Sie dies unter def handle und set
if not options.get('addrport'): self.addr = '0.0.0.0' self.port = self.default_port

Wenn Sie nun "python manage.py runserver" ausführen, wird es standardmäßig unter "0.0.0.0:" ausgeführt.

Viel Spaß beim Codieren .....


3
Das Ändern der Quellen abhängiger Pakete wird als schlechte Praxis angesehen. Änderungen können bei der Aktualisierung / Neuinstallation verloren gehen.
Arogachev

Das ist richtig @arogachev. Es ist nur eine Option, mit der Sie Standardport und -host festlegen können. Es ist jedoch keine gute Vorgehensweise, abhängige Pakete zu ändern. Sie können die IP und den Port festlegen, wenn Sie Ihren Server auch an der Eingabeaufforderung ausführen.
Amrendra
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.