Created
February 15, 2013 16:36
-
-
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…
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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', '[email protected]'), | |
) | |
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