· 7 years ago · Jul 20, 2018, 07:16 AM
1import os
2import datetime
3
4# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
5BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
6
7
8# Quick-start development settings - unsuitable for production
9# See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/
10
11# SECURITY WARNING: keep the secret key used in production secret!
12SECRET_KEY = '<secret-key-here>'
13
14# SECURITY WARNING: don't run with debug turned on in production!
15DEBUG = False
16
17ALLOWED_HOSTS = ['*']
18
19
20# Application definition
21
22INSTALLED_APPS = [
23 'django.contrib.admin',
24 'django.contrib.auth',
25 'django.contrib.contenttypes',
26 'django.contrib.sessions',
27 'django.contrib.messages',
28 'django.contrib.staticfiles',
29 'django.contrib.sites',
30
31 # Third party packages
32 'rest_framework',
33 'rest_framework.authtoken',
34 'django_filters',
35 'allauth',
36 'allauth.account',
37 'rest_auth',
38 'rest_auth.registration',
39 # 'rest_framework_cache',
40
41 # For development
42 'debug_toolbar',
43
44 # My app
45 'tasks',
46 'users',
47]
48
49SITE_ID = 1
50
51MIDDLEWARE = [
52 'corsheaders.middleware.CorsMiddleware',
53 'django.middleware.common.CommonMiddleware',
54 'debug_toolbar.middleware.DebugToolbarMiddleware',
55
56 'django.middleware.security.SecurityMiddleware',
57 'django.contrib.sessions.middleware.SessionMiddleware',
58 'django.middleware.common.CommonMiddleware',
59 'django.middleware.csrf.CsrfViewMiddleware',
60 'django.contrib.auth.middleware.AuthenticationMiddleware',
61 'django.contrib.messages.middleware.MessageMiddleware',
62 'django.middleware.clickjacking.XFrameOptionsMiddleware',
63]
64
65ROOT_URLCONF = 'MyToDo.urls'
66AUTH_USER_MODEL = 'users.User'
67INTERNAL_IPS = '127.0.0.1:8000'
68
69# CORS
70CORS_ORIGIN_ALLOW_ALL = True
71CORS_ALLOW_CREDENTIALS = True
72
73# REST FRAMEWORK
74
75REST_FRAMEWORK = {
76 'DEFAULT_FILTER_BACKENDS': (
77 'django_filters.rest_framework.DjangoFilterBackend',
78 ),
79 'DEFAULT_AUTHENTICATION_CLASSES': (
80 'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
81 ),
82 'DATETIME_FORMAT': "%d/%m/%Y %H:%M:%S",
83}
84
85# REST AUTH
86OLD_PASSWORD_FIELD_ENABLED = True
87
88REST_AUTH_SERIALIZERS = {
89 'USER_DETAILS_SERIALIZER': 'users.serializers.UserSerializer',
90}
91
92# JWT OPTIONS
93REST_USE_JWT = True
94
95JWT_AUTH = {
96 'JWT_ENCODE_HANDLER':
97 'rest_framework_jwt.utils.jwt_encode_handler',
98
99 'JWT_DECODE_HANDLER':
100 'rest_framework_jwt.utils.jwt_decode_handler',
101
102 'JWT_PAYLOAD_HANDLER':
103 'rest_framework_jwt.utils.jwt_payload_handler',
104
105 'JWT_PAYLOAD_GET_USER_ID_HANDLER':
106 'rest_framework_jwt.utils.jwt_get_user_id_from_payload_handler',
107
108 'JWT_RESPONSE_PAYLOAD_HANDLER':
109 'rest_framework_jwt.utils.jwt_response_payload_handler',
110
111 'JWT_SECRET_KEY': SECRET_KEY,
112 'JWT_GET_USER_SECRET_KEY': None,
113 'JWT_PUBLIC_KEY': None,
114 'JWT_PRIVATE_KEY': None,
115 'JWT_ALGORITHM': 'HS256',
116 'JWT_VERIFY': True,
117 'JWT_VERIFY_EXPIRATION': True,
118 'JWT_LEEWAY': 0,
119 'JWT_EXPIRATION_DELTA': datetime.timedelta(days=7),
120 'JWT_AUDIENCE': None,
121 'JWT_ISSUER': None,
122
123 'JWT_ALLOW_REFRESH': True,
124 'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),
125
126 'JWT_AUTH_HEADER_PREFIX': 'JWT',
127 'JWT_AUTH_COOKIE': None,
128
129}
130
131
132TEMPLATES = [
133 {
134 'BACKEND': 'django.template.backends.django.DjangoTemplates',
135 'DIRS': [],
136 'APP_DIRS': True,
137 'OPTIONS': {
138 'context_processors': [
139 'django.template.context_processors.debug',
140 'django.template.context_processors.request',
141 'django.contrib.auth.context_processors.auth',
142 'django.contrib.messages.context_processors.messages',
143 ],
144 },
145 },
146]
147
148WSGI_APPLICATION = 'MyToDo.wsgi.application'
149
150
151# Database
152# https://docs.djangoproject.com/en/2.0/ref/settings/#databases
153
154if 'RDS_DB_NAME' in os.environ:
155 DATABASES = {
156 'default': {
157 'ENGINE': 'django.db.backends.postgresql_psycopg2',
158 'NAME': os.environ['RDS_DB_NAME'],
159 'USER': os.environ['RDS_USERNAME'],
160 'PASSWORD': os.environ['RDS_PASSWORD'],
161 'HOST': os.environ['RDS_HOSTNAME'],
162 'PORT': os.environ['RDS_PORT'],
163 }
164 }
165else:
166 DATABASES = {
167 'default': {
168 'ENGINE': 'django.db.backends.postgresql',
169 'NAME': 'localtask',
170 'USER': 'localtask',
171 'PASSWORD': 'localtask',
172 'HOST': 'localhost',
173 'PORT': '',
174 }
175 }
176
177# Cache
178
179CACHES = {
180 "default": {
181 "BACKEND": "django_redis.cache.RedisCache",
182 "LOCATION": "redis://127.0.0.1:6379",
183 "OPTIONS": {
184 "CLIENT_CLASS": "django_redis.client.DefaultClient",
185 }
186 }
187}
188
189# REST Cache
190
191REST_FRAMEWORK_CACHE = {
192 'DEFAULT_CACHE_BACKEND': 'default',
193}
194
195
196# Password validation
197# https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators
198
199AUTH_PASSWORD_VALIDATORS = [
200 {
201 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
202 },
203 {
204 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
205 },
206 {
207 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
208 },
209 {
210 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
211 },
212]
213
214
215# Internationalization
216# https://docs.djangoproject.com/en/2.0/topics/i18n/
217
218LANGUAGE_CODE = 'en-us'
219
220TIME_ZONE = 'UTC'
221
222USE_I18N = True
223
224USE_L10N = True
225
226USE_TZ = True
227
228
229# Static files (CSS, JavaScript, Images)
230# https://docs.djangoproject.com/en/2.0/howto/static-files/
231
232STATIC_URL = '/static/'
233STATIC_ROOT = os.path.join(BASE_DIR, "www", "static")