Django Projects y git

¿Cómo puedo manejar la security de los frameworks web como django en github o cualquier otro sitio de control de versiones de dominio público?

El settings.py puede y generalmente contendrá información sensible de la database, passwords y keys secretas, que no deben cargarse en el repository ni a la vista.

¿Cuál es la práctica común y la forma less complicada de manejar eso?

Como @Selcuk menciona, la aplicación 12 Factor proporciona una buena guía sobre cómo proteger y aislar su información confidencial.

En otra respuesta aquí: Configuración de Django: upload KeyError, upload ImproperlyConfigunetworking o usar los valores pnetworkingeterminados?
Explico el método que suelo usar para estar lo más cerca posible de las pautas de 12 factores.
En especie:

  1. Cree un file .env o .ini con sus variables de proyecto en él:

     DB_USERNAME=myDB DB_PASSWORD=for_your_eyes_only DEBUG=False MY_DJANGO_KEY=no_peeking_this_is_secret ... 
  2. Agregue .env y .env.* O .ini y .ini.* En su file .gitignore , protegiendo de esta manera su información confidencial cargada en github.
  3. Cree un env.example (tenga cuidado de no nombrarlo con a . principio, porque se ignorará). En ese file, puede poner un ejemplo de la configuration esperada para que pueda volver a producirse simplemente copy, paste, rename to .ini or .env .
  4. Use decouple.config para leer su file de configuration:

    en settings.py

     from decouple import Csv, config DEBUG = config('DEBUG', cast=bool, default=True) SECRET_KEY = config('MY_DJANGO_KEY') ... 

Buena suerte 🙂

Generalmente utilizo settings.py diferentes para cada etapa (desarrollo, testing y producción). El único que mantengo en un control de versión es el correspondiente al desarrollo. Los otros settings.py son internos y, cuando es necesario, se copyn a cada instancia del server (testing y producción).

Espero que esto ayude.

Respuesta fácil: .gitignore a tu .gitignore . Dicho esto, si tiene la intención de compartir su aplicación Django, querrá proporcionar al less las partes que editó para su aplicación.

La contraseña y las informaciones confidenciales se almacenan en mi caso en configuraciones individuales dev_settings.py y prod_settings.py Ambos files están en .gitignore . En settings.py puedo cambiar entre ellos a través de un entorno como este:

 DEV_SETTINGS = '_XXXXX_' if os.environ.get('PROJECT_NAME_PROD', 'NO') == 'YES': from project.prod_settings import * else: from project.dev_settings import * 

Con esto, aún puede tener su settings.py en el repository.