tutorial english documentacion django django-settings

english - documentacion de django



Dónde almacenar llaves secretas DJANGO (4)

Debe almacenar su configuración de forma modular. Con eso quiero extender tu configuración a través de múltiples archivos.

Por ejemplo, puede tener base_settings.py para almacenar todas sus configuraciones básicas; dev_settings.py para la configuración de su servidor de desarrollo; y finalmente prod_base_settings.py para todas las configuraciones de producción. Todos los archivos de configuración que no sean de base importará todas las configuraciones básicas y luego solo cambiará lo que sea necesario:

# base_settings.py ... # dev_settings.py from base_settings import * DEBUG = TRUE ... # prod_base_settings.py from base_settings import * DEBUG = FALSE ...

Este enfoque le permite tener diferentes configuraciones de diferentes configuraciones. También puede enviar todos estos archivos, excepto que en el servidor de producción puede crear el archivo de configuración de producción real prod_settings.py donde especificará todas las configuraciones confidenciales. Este archivo no se debe comprometer en ningún lugar y su contenido debe mantenerse seguro:

# prod_settings.py from prod_base_settings import * SECRET_KEY = ''foo''

En cuanto a los nombres de archivo, puede usar cualquier nombre de archivo que considere apropiado. Personalmente, realmente creo un paquete de Python para la configuración y luego guardo las diversas configuraciones dentro del paquete:

project/ project/ settings/ __init__.py base.py dev.py ... app1/ models.py ... app2/ models.py ...

Por mi vida, he estado buscando esto en todas partes y no he encontrado la respuesta. Espero no publicar un duplicado.

Se recomienda en todas partes que mantenga sus claves secretas en un archivo separado de su configuración general.py. Además, nunca debe enviar su archivo "secret.py" que contenga claves como SECRET_KEY, AWS_SECRET_KEY, etc.

Mi pregunta es: en su servidor de producción, necesita hacer referencia a sus claves secretas, eso significa que su archivo de configuración "secret.py", debe vivir en algún lugar alrededor del servidor ¿no? Si es así, ¿cómo protege sus claves secretas en producción?


En lugar de lógica si / entonces, debería usar una herramienta diseñada para factorizar datos confidenciales. Yo uso YamJam https://pypi.python.org/pypi/yamjam/ . Permite todas las ventajas del método os.environ, pero es más simple: aún tienes que establecer esas variables de entorno, tendrás que ponerlas en un script en alguna parte. YamJam almacena estas configuraciones de configuración en un almacén de configuración de máquina y también permite la anulación de un proyecto por proyecto.

from YamJam import yamjam variable = yamjam()[''myproject''][''variable'']

Es el uso básico. Y al igual que el método os.environ, no es específico del framework, puede usarlo con Django o cualquier otra aplicación / framework. Los he probado todos, múltiples archivos settings.py, lógica frágil de if / then y discusión de entorno. Al final, cambié a yamjam y no me arrepentí.


Sé que ha pasado mucho tiempo, pero acabo de abrir una pequeña aplicación de Django que estoy utilizando para generar una nueva clave secreta si aún no existe. Se llama django-generate-secret-key .

pip install django-generate-secret-key

Luego, cuando aprovisiono / despliegue un nuevo servidor ejecutando mi proyecto Django, ejecuto el siguiente comando (desde Ansible):

python manage.py generate_secret_key

Simplemente:

  • comprueba si se debe generar una clave secreta
  • lo genera en un archivo secretkey.txt (se puede personalizar)

Todo lo que necesita entonces es tener en su archivo de configuración:

with open(''/path/to/the/secretkey.txt'') as f: SECRET_KEY = f.read().strip()

Ahora puede beneficiarse de un proceso de aprovisionamiento completamente automatizado sin tener que almacenar una clave secreta estática en su repositorio.


Hay bastantes opciones para producción. La forma en que lo hago es estableciendo mis variables de datos confidenciales como variables de entorno en los entornos de producción. Luego recupero las variables en settings.py través de os.environ.get() como os.environ.get() :

secret_KEY=os.environ.get(''secret_KEY'')

Otra opción posible es copiar en el archivo secret.py través de su script de implementación.

Estoy seguro de que también hay otras opciones específicas para diferentes servidores web.