Django cambia el puerto predeterminado del servidor de ejecución

7 minutos de lectura

avatar de usuario
jonny

Me gustaría hacer el puerto predeterminado que manage.py runserver escucha en especificable en un extraño config.ini. ¿Hay una solución más fácil que analizar sys.argv en el interior manage.py e insertando el puerto configurado?

el objetivo es correr ./manage.py runserver sin tener que especificar la dirección y el puerto cada vez, pero teniendo que tomar los argumentos del config.ini.

  • Si ejecuta el comando desde su historial de línea de comandos, entonces son aún menos pulsaciones de teclas. Por ejemplo, para mí es “runs“, y ejecuta automáticamente el mismo comando que la última vez, por lo que se incluye el puerto, etc.

    –Jonathan Hartley

    20 de mayo de 2015 a las 10:09

crea un script bash con lo siguiente:

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

guárdelo como runserver en el mismo directorio que manage.py

chmod +x runserver

y ejecutarlo como

./runserver

  • O eso, o estoy pensando en agregar un comando de administración personalizado.

    – Jonny

    13 mayo 2014 a las 19:56

  • No puede ejecutar el servidor de desarrollo mediante programación, por lo que un comando personalizado no funcionará a menos que llame al shell usando algo como call. Si esta solución funciona para usted, asegúrese de marcarla como resuelta.

    – arreglar mi código

    13 mayo 2014 a las 20:21


  • De hecho, comencé a usar supervisor para esto ahora, eso hace que sea aún más fácil de manejar. 🙂 Pero la suya es probablemente la solución más limpia además de escribir un runserver guion.

    – Jonny

    29 mayo 2014 a las 16:14


  • Supervisor es una buena solución porque no lo recomendaría para ejecutar el entorno de desarrollo. Se pierde la ventaja de tener la salida del servidor en el terminal, entre otras cosas. Si realmente quiere usar supervisor, mi consejo sería usarlo con un servidor WSGI con todas las funciones como Gunicorn. Por favor, no ejecute el servidor de desarrollo como su servidor de producción…

    – arreglar mi código

    3 de junio de 2014 a las 1:53

  • Esto es útil pero no excelente cuando se hacen malabarismos con varios proyectos a la vez; habría aceptado la respuesta a continuación, que especifica el puerto que se usará para cada proyecto distinto. Solo mi opinión aunque.

    usuario7179686

    20 de junio de 2017 a las 12:23

En realidad, la forma más fácil de cambiar (solo) el puerto en el servidor Django de desarrollo es como:

python manage.py runserver 7000

que debería ejecutar el servidor de desarrollo en http://127.0.0.1:7000/

  • Esta respuesta se trata de cambiar el puerto, no cambiar el puerto predeterminado.

    – atracción física

    14 de junio de 2018 a las 14:32

  • Esta debería ser la respuesta correcta, la aceptada también implica la dirección IP y ejecutar manage.py por alguna razón, en lugar de llamarlo a través de python

    – E. Serra

    19 abr 2021 a las 12:40

avatar de usuario
BillyBBone

A partir de Django 1.9, la solución más simple que he encontrado (basada en la solución de Quentin Stafford-Fraser) es agregar algunas líneas a manage.py que modifican dinámicamente el número de puerto predeterminado antes de invocar el runserver dominio:

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)

  • Aunque no responde exactamente a la pregunta original, y la sangría está desordenada (el código debe estar sangrado desde “importar django” hacia abajo), prefiero esta respuesta porque es completamente independiente y no requiere cambiar lo que se ingresa en la línea de comando.

    – Púrpura Diane

    17/07/2016 a las 22:43

  • @PurpleDiane La sangría está arreglada.

    – Flamm

    28 de diciembre de 2016 a las 11:10


  • Mi manage.py realmente no se ve así, supongo que Django cambió desde

    – NaturalBornCamper

    26 de febrero de 2018 a las 22:15

  • Actualmente (a partir de 2.0.3) solo puede agregar: from django.core.management.commands.runserver import Command as runserver; runserver.default_port = "8080 a su manage.py. También puede cambiar la dirección de escucha con: runserver.default_addr

    – Vargas

    8 de marzo de 2018 a las 1:40


avatar de usuario
Krishnamoorthy Acharya

Todos los siguientes comandos son posibles para cambiar el puerto mientras se ejecuta django:

python manage.py runserver 127.0.0.1:7000

python manage.py runserver 7000

python manage.py runserver 0:7000

Crear una subclase de django.core.management.commands.runserver.Command y sobrescribir el default_port miembro. Guarde el archivo como un comando de gestión propio, por ejemplo, en <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

Estoy cargando la configuración del formulario de puerto predeterminado aquí (que a su vez lee otros archivos de configuración), pero también podría leerlo directamente desde algún otro archivo.

  • Esta parece ser la mejor solución, sin embargo, mi Django 1.8.14 no reconoce mi archivo creado por mí mismo. runserver.py. ¿Debo registrarlo en alguna parte?

    – atracción física

    14 de junio de 2018 a las 14:47

  • @physicalattraction Su archivo probablemente no esté en la ubicación correcta. docs.djangoproject.com/en/2.0/howto/custom-management-commands comienza con una descripción de dónde colocar el módulo de python para el runserver dominio. También tal vez tengas otra aplicación. además registrando un comando llamado runserver. Intente cambiar el nombre de su comando y vea si se reconoce.

    – Feuermurmel

    27 de junio de 2018 a las 12:14

  • lo puse en <app_name>/management/commands/runserver.pypero entonces el original de Django runserver se usa Cuando le cambio el nombre a run_server.py, se reconoce. no veo nada especial en runserver en la página a la que se vincula.

    – atracción física

    27 de junio de 2018 a las 16:51

  • La cosa es staticfiles hace exactamente lo que tu sugerir. Por lo tanto, seguir sus instrucciones interrumpe el servicio de archivos estáticos en desarrollo. Lo mejor es importar desde django.contrib.staticfiles.management.commands.

    – x-yuri

    4 de enero de 2019 a las 2:41

avatar de usuario
Quentin Stafford-Fraser

Creamos un nuevo comando de administración ‘runserver’ que es un envoltorio delgado alrededor del estándar pero cambia el puerto predeterminado. Aproximadamente, creas management/commands/runserver.py y poner algo como esto:

# 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

  • Esta parece ser la mejor solución, sin embargo, mi Django 1.8.14 no reconoce mi archivo creado por mí mismo. runserver.py. ¿Debo registrarlo en alguna parte?

    – atracción física

    14 de junio de 2018 a las 14:47

  • @physicalattraction Su archivo probablemente no esté en la ubicación correcta. docs.djangoproject.com/en/2.0/howto/custom-management-commands comienza con una descripción de dónde colocar el módulo de python para el runserver dominio. También tal vez tengas otra aplicación. además registrando un comando llamado runserver. Intente cambiar el nombre de su comando y vea si se reconoce.

    – Feuermurmel

    27 de junio de 2018 a las 12:14

  • lo puse en <app_name>/management/commands/runserver.pypero entonces el original de Django runserver se usa Cuando le cambio el nombre a run_server.py, se reconoce. no veo nada especial en runserver en la página a la que se vincula.

    – atracción física

    27 de junio de 2018 a las 16:51

  • La cosa es staticfiles hace exactamente lo que tu sugerir. Por lo tanto, seguir sus instrucciones interrumpe el servicio de archivos estáticos en desarrollo. Lo mejor es importar desde django.contrib.staticfiles.management.commands.

    – x-yuri

    4 de enero de 2019 a las 2:41

avatar de usuario
chaggy

En Pycharm, simplemente puede agregar el puerto a los parámetros

ingrese la descripción de la imagen aquí

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad