Objetivo: Ejecutar múltiples sevidores locales de django, para probar por ejemplo cuando estemos desarrollando una API o Web Service.

Lo que podemos lograr con esto, es dejar un en modo PROD para que alguien consulte, y otro en modo DEV para que vayamos probando nosotros al desarrollar.

El método normal para Ejecutar múltiples servidores locales de django es haciendolo en diferentes puertos.

En una terminal ejecutaremos:

 python manage.py runserver 0.0.0.0:8000

Y en ora pestaña ejecutaríamos

python manage.py runserver 0.0.0.0:8001

Con esto, tendriamos dos servidores, pero que logramos con esto? No mucho, lo que nos sería útil, es ejecutar dos servidores con dos configuraciones diferentes.

Como hacemos?

Entonces, por ejemplo, podemos tener dos archivos de configuraciones diferentes. dev.py y prod.py

Nos dirigimos a la carpeta de nuestro proyecto.

Si miramos el código del archivo manage.py, vemos q busca una variable de entorno y sino la encuentra, la setea con lo que le digamos nosotros, con la función setdefault.

setdefault(key[default])

If key is in the dictionary, return its value. If not, insert key with a value of default and return defaultdefault defaults to None.

 

Un simple manage.py podría ser:
Notar que dentro de nuetro proyecto, tendremos un directorio settings, donde tendremos nuetros archivos de configuración.
La idea es tener dos archivos: dev.py y prod.py , en el que tendremos la configuracion de desarrollo y producción respectivamente.

Entonces, como hacemos?

Abrimos dos terminales conectadas a donde tenemos el servidor.
En una pestaña exportamos esta variable de entorno que vemos en el manage.py
$ export  DJANGO_SETTINGS_MODULE=<span style="color: #ff0000;">nombre_proyecto</span>.settings.prod
$ env | grep DJ
DJANGO_SETTINGS_MODULE=<span style="color: #ff0000;">nombre_proyecto</span>.settings.prod
Y en otra pestaña no.
Entones, con esto logramos que en la que exportamos esa variable de entorno logramos que el manage use el archivo de config prod.py, y en la terminal que no exportamos esa variable, tomara la del manage.py (que le deberemos poner dev.py), de la siguiente manera: