Internals

Layout

myproject/__init__.py
          env.py
          security.py
          security_FLEXI_RUN_ENV.py
          settings.py
          settings_FLEXI_RUN_ENV.py
  • env.py has a single variable FLEXI_RUN_ENV that defines a running environment. This variable is then used to call different profiles of configuration depending on the running environment like dev, stage and prod. The FLEXI_RUN_ENV variable can also be set by environment, the environment takes precedence over env.py. Example:

    $ export FLEXI_RUN_ENV='dev'; python manage.py runserver
    
  • security.py holds all the common security variables for the project, probably a good place for SECRET_KEY.

  • security_FLEXI_RUN_ENV specific environment security variables, dedicated database passwords should go there. Setting defined here will override settings defined in security.py.

  • settings.py the classic settings file found in all django projects.

  • settings_FLEXI_RUN_ENV.py gathers local settings for a given running environment, settings defined here will override settings defined in settings.py.

Loading order

The modules are loaded in the following order:

  1. myproject/env.py
  2. myproject/security.py
  3. myproject/security_FLEXI_RUN_ENV.py
  4. myproject/settings.py
  5. myproject/settings_FLEXI_RUN_ENV.py

If the FLEXI_RUN_ENV variable is false in python, the only settings files read are security.py and settings.py.