Al tratar de encontrar un lugar para almacenar y guardar configuraciones más allá de settings.py y la base de datos, utilicé un environment.json para variables de entorno. Importe estos en settings.pyNo se pueden usar variables de entorno para la configuración en Django
Mi problema es que cuando trato de cambiar o almacenar nuevos valores en mi entorno, env
, settings.py
no nota el cambio, tal vez porque Django lee la hora y el número de veces settings.py.
¿Hay alguna manera en la que pueda usar mis variables de entorno de la manera que deseo y a continuación intente?
# settings.py
import json
with open('/home/dotcloud/environment.json') as f:
env = json.load(f)
EMAIL_HOST = env.get('EMAIL_PORT', '500')
# views.py
import json
def site_configuration(request):
with open('/home/dotcloud/environment.json') as f:
env = json.load(f)
if request.method == 'POST':
os.environ['EMAIL_PORT'] = request.POST['email_port']
return render(request, ...)
# python manage.py shell demo
>>> import json
>>> with open('/home/dotcloud/environment.json') as f:
... env = json.load(f)
...
>>> project_settings.EMAIL_PORT
'500'
>>> env['EMAIL_PORT']
Traceback (most recent call last):
File "<console>", line 1, in <module>
KeyError: 'EMAIL_PORT'
>>> env['EMAIL_PORT'] = "123"
>>> env['EMAIL_PORT']
'123'
>>> project_settings.EMAIL_PORT
'500'
>>> project_settings.EMAIL_PORT == env['EMAIL_PORT']
False'
Y si no es así, de qué otra manera podría almacenar la configuración de variables que son retirados por settings.py
en alguna parte de mi proyecto Django?
El uso de 'putenv()' en el shell ni siquiera cambia el valor del entorno. También está esto: "Cuando' putenv() 'es compatible, las asignaciones a los elementos en' os.environ' se traducen automáticamente en las llamadas correspondientes a 'putenv()'; sin embargo, las llamadas a 'putenv()' no actualizan 'os.environ', por lo que es preferible asignar elementos de os.environ'." Creo que debería encontrar otra forma de almacenar y modificar dinámicamente las configuraciones para el correo electrónico – Kiwi
Vaya ... tienes razón, eliminaré esa parte. El resto del consejo aún cuenta sin embargo :) – Wolph
Oye, al menos aprendí algunas cosas nuevas sobre las operaciones de variables de entorno en Python. ;) – Kiwi