Solución:
Vea los documentos de implementación de Django para una discusión sobre esto.
Hay bastantes opciones de producción. La forma en que lo hago es estableciendo mis variables de datos confidenciales como variables ambientales en los entornos de producción. Luego recupero las variables en el settings.py
vía os.environ
al igual que:
import os
SECRET_KEY = os.environ['SECRET_KEY']
Otra posible opción es copiar en el secret.py
archivo a través de su script de implementación.
Estoy seguro de que también hay otras opciones específicas para diferentes servidores web.
Quería agregar una nueva respuesta porque, como principiante, la respuesta aceptada anteriormente no tenía mucho sentido para mí (era solo una parte del rompecabezas).
Así que así es como guardo mis claves LOCALMENTE y en PRODUCCIÓN (Heroku y otros).
Nota: Realmente solo tiene que hacer esto si planea poner su proyecto en línea. Si es solo un proyecto local, no es necesario.
1) Instale python-dotenv para crear un entorno de proyecto local para almacenar su clave secreta.
pip install python-dotenv
2) Crea un .env
archivo en su directorio base (donde manage.py
es).
YourDjangoProject
├───project
│ ├───__init__.py
│ ├───asgi.py
│ ├───settings.py
│ ├───urls.py
│ └───wsgi.py
├───.env
├───manage.py
└───db.sqlite3
Si tiene un proyecto de Heroku, debería verse así:
YourDjangoProject
├───.git
├───project
│ ├───__init__.py
│ ├───asgi.py
│ ├───settings.py
│ ├───urls.py
│ └───wsgi.py
├───venv
├───.env
├───.gitignore
├───manage.py
├───Procfile
├───requirements.txt
└───runtime.txt
3) Agregar .env
para usted .gitignore
expediente.
echo .env > .gitignore # Or just open your .gitignore and type in .env
Así es como mantiene su clave secreta más segura porque no carga su archivo .env en git o heroku (o en cualquier otro lugar).
4) Agregue su SECRET_KEY de su archivo settings.py en el archivo .env así (sin comillas)
**Inside of your .env file**
SECRET_KEY=qolwvjicds5p53gvod1pyrz*%2uykjw&a^&c4moab!w=&16ou7 # <- Example key, SECRET_KEY=yoursecretkey
5) Dentro de su archivo settings.py, agregue la siguiente configuración:
import os
import dotenv # <- New
# Add .env variables anywhere before SECRET_KEY
dotenv_file = os.path.join(BASE_DIR, ".env")
if os.path.isfile(dotenv_file):
dotenv.load_dotenv(dotenv_file)
# Update secret key
SECRET_KEY = os.environ['SECRET_KEY'] # Instead of your actual secret key
Y ahora su clave secreta se almacena con éxito localmente.
6) Agregue la variable de entorno SECRET_KEY en su host (como Heroku).
Trabajo principalmente con sitios de Heroku, así que si quieres usar Heroku para un proyecto de Django, esta parte es para ti.
Esto supone que ya tiene una configuración de proyecto de Heroku y ha descargado la CLI de Heroku en su computadora.
Tienes 2 opciones:
- Desde Command Line / Terminal, puede ingresar el siguiente comando en el directorio de su proyecto:
heroku config:set SECRET_KEY=yoursecretkey # Again, no quotes.
- Puede ir a su panel de Heroku, hacer clic en su aplicación, ir a la configuración de sus aplicaciones y ver la sección “Config Vars” y hacer clic en “Revelar Vars” o “Agregar Vars” y agregar su SECRET_KEY allí.
Luego, cuando envíe su proyecto a Heroku a través de git, debería funcionar correctamente sin ningún problema.
¡y eso es!
Esta respuesta estaba dirigida a principiantes / intermedios totales para, con suerte, eliminar cualquier confusión (porque definitivamente fue confuso para mí).
¡Espero que esto ayude!
Codificación feliz.
Debe almacenar su configuración de forma modular. Con eso me refiero a distribuir su configuración en varios archivos.
Por ejemplo, puede tener base_settings.py
para almacenar todos sus ajustes básicos; dev_settings.py
para la configuración de su servidor de desarrollo; y finalmente prod_base_settings.py
para todos los entornos de producción. Todos los archivos de configuración que no sean la base importarán todas las configuraciones básicas y luego solo cambiarán 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 sensibles. Este archivo no debe enviarse 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 utilizar los nombres de archivo que considere apropiados. Personalmente, 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
...