Skip to content

Instantly share code, notes, and snippets.

@bjinwright
Created February 15, 2013 16:36
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bjinwright/4961567 to your computer and use it in GitHub Desktop.
Save bjinwright/4961567 to your computer and use it in GitHub Desktop.
So part of being a 12-factor app is storing your config in your environment (http://12factor.net/config). This is how I do that using Django settings files. This is the code companion for a blog post (http://blog.ipoots.com/post/43154090079/how-to-achieve-12-factor-app-config-glory-with-django). A similar blog post is http://www.wellfireinteract…
# Django settings for dnsly project.
from unipath import FSPath as Path
import os
def env(key, default=None):
"""Retrieves env vars and makes Python boolean replacements"""
val = os.getenv(key, default)
if val == 'True':
val = True
elif val == 'False':
val = False
return val
#Path Settings
PROJECT_DIR = Path(__file__).absolute().ancestor(2)
DEBUG = False
TEMPLATE_DEBUG = DEBUG
ADMINS = (
('Brian Jinwright', 'brian@example.com'),
)
CURRENT_SITE = env('CURRENT_SITE')
#Static Files Settings
STATIC_ROOT = PROJECT_DIR.child('static')
STATICFILES_DIRS = (
PROJECT_DIR.ancestor(1).child('static'),
)
STATICFILES_FINDERS = ('django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'compressor.finders.CompressorFinder'
)
STATIC_URL = env('STATIC_URL')
#Site Media Settings
MEDIA_ROOT = PROJECT_DIR.child('site_media')
MEDIA_URL = env('MEDIA_URL')
MANAGERS = ADMINS
LOGIN_URL = env('LOGIN_URL')
TIME_ZONE = env('TIME_ZONE')
LANGUAGE_CODE = env('LANGUAGE_CODE')
SITE_ID = env('SITE_ID')
USE_I18N = env('USE_I18N')
USE_L10N = env('USE_L10N')
AUTH_PROFILE_MODULE = env('AUTH_PROFILE_MODULE')
SECRET_KEY = env('SECRET_KEY')
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
ROOT_URLCONF = env('ROOT_URLCONF')
LOGIN_REDIRECT_URL = env('LOGIN_REDIRECT_URL')
#Template Directory
TEMPLATE_DIRS = (
PROJECT_DIR.child('templates'),
)
CACHES = {
'default': {
'BACKEND': env('CACHE_BACKEND'),
'LOCATION': env('CACHE_HOST'),
}
}
INSTALLED_APPS = (
'django.contrib.messages',
'django.contrib.sessions',
'django.contrib.staticfiles',
)
ACCOUNT_ACTIVATION_DAYS = env('ACCOUNT_ACTIVATION_DAYS')
TEST_RUNNER = env('TEST_RUNNER')
TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.debug",
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.i18n',
'django.core.context_processors.request',
"django.core.context_processors.static",
'django.contrib.messages.context_processors.messages',
)
#Email Settings
DEFAULT_FROM_EMAIL = env('DEFAULT_FROM_EMAIL')
EMAIL_BACKEND = env('EMAIL_BACKEND')
SERVER_EMAIL = env('SERVER_EMAIL')
SESSION_ENGINE = env('SESSION_ENGINE')
#SaaS Settings
AWS_ACCESS_KEY_ID = env('AWS_ACCESS_KEY_ID')
AWS_SECRET_ACCESS_KEY = env('AWS_SECRET_ACCESS_KEY')
STRIPE_SECRET = env('STRIPE_SECRET')
STRIPE_PUBLISHABLE = env('STRIPE_PUBLISHABLE')
MAILCHIMP_API_KEY = env('MAILCHIMP_API_KEY')
MAILCHIMP_WEBHOOK_KEY = env('MAILCHIMP_WEBHOOK_KEY')
CURRENT_ENV = env('CURRENT_ENV')
#Django Secure Settings
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
if CURRENT_ENV != 'development':
MIDDLEWARE_CLASSES += (
"djangosecure.middleware.SecurityMiddleware",
)
INSTALLED_APPS += (
'djangosecure',
)
SECURE_SSL_REDIRECT = env('SECURE_SSL_REDIRECT',False)
SECURE_FRAME_DENY = env('SECURE_FRAME_DENY',False)
SECURE_BROWSER_XSS_FILTER = env('SECURE_BROWSER_XSS_FILTER',False)
SESSION_COOKIE_SECURE = env('SESSION_COOKIE_SECURE',False)
SESSION_COOKIE_HTTPONLY = env('SESSION_COOKIE_HTTPONLY',False)
SECURE_HSTS_SECONDS = env('SECURE_HSTS_SECONDS',False)
SECURE_HSTS_INCLUDE_SUBDOMAINS = env('SECURE_HSTS_INCLUDE_SUBDOMAINS',False)
SECURE_CONTENT_TYPE_NOSNIFF = env('SECURE_CONTENT_TYPE_NOSNIFF',False)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment