Django cambia el puerto predeterminado del servidor de ejecución
⏰ 7 minutos de lectura
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.
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:
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
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
Krishnamoorthy Acharya
Todos los siguientes comandos son posibles para cambiar el puerto mientras se ejecuta django:
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
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
chaggy
En Pycharm, simplemente puede agregar el puerto a los parámetros
¿Ha sido útil esta solución?
Tu feedback nos ayuda a saber si la solución es correcta y está funcionando. De esta manera podemos revisar y corregir el contenido.
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
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