· 4 years ago · Aug 20, 2021, 01:36 PM
1"""
2Django settings for ecommerce_dns project.
3
4Generated by 'django-admin startproject' using Django 3.2.3.
5
6For more information on this file, see
7https://docs.djangoproject.com/en/3.2/topics/settings/
8
9For the full list of settings and their values, see
10https://docs.djangoproject.com/en/3.2/ref/settings/
11"""
12import os
13
14from pathlib import Path
15from keys import (
16 SECRET_KEY,
17 DB_USER,
18 DB_PASSWORD,
19 DB_NAME,
20 DB_HOST,
21 DB_HOST_DOCKER,
22 TESTDB_NAME
23)
24
25from datetime import timedelta
26from loguru import logger
27
28
29logger.add("info.log", format="{time} {level} {message}",
30 level="INFO", rotation="100 KB", compression="zip")
31logger.add("error.log", format="{time} {level} {message}",
32 level="ERROR", rotation="100 KB", compression="zip")
33
34# Build paths inside the project like this: BASE_DIR / 'subdir'.
35BASE_DIR = Path(__file__).resolve().parent.parent
36
37
38# Quick-start development settings - unsuitable for production
39# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/
40
41# SECURITY WARNING: keep the secret key used in production secret!
42
43# SECURITY WARNING: don't run with debug turned on in production!
44DEBUG = True
45if DEBUG:
46 ALLOWED_HOSTS = ['*']
47else:
48 ALLOWED_HOSTS = ['localhost', '127.0.0.1', '0.0.0.0']
49
50# Application definition
51INSTALLED_APPS = [
52 'django.contrib.admin',
53 'django.contrib.auth',
54 'django.contrib.contenttypes',
55 'django.contrib.sessions',
56 'django.contrib.messages',
57 'django.contrib.staticfiles',
58 'rest_framework_simplejwt',
59 'rest_framework',
60 'corsheaders',
61 'drf_spectacular',
62 'shop',
63 'accounts',
64]
65
66MIDDLEWARE = [
67 'django.middleware.security.SecurityMiddleware',
68 'django.contrib.sessions.middleware.SessionMiddleware',
69 # 'corsheaders.middleware.CorsMiddleware',
70 'django.middleware.common.CommonMiddleware',
71 'django.middleware.csrf.CsrfViewMiddleware',
72 'django.contrib.auth.middleware.AuthenticationMiddleware',
73 'django.contrib.messages.middleware.MessageMiddleware',
74 'django.middleware.clickjacking.XFrameOptionsMiddleware',
75]
76
77# CORS_ORIGIN_ALLOW_ALL = True
78
79# CORS_ALLOWED_ORIGINS = [
80# 'http://localhost:8080'
81# ]
82
83ROOT_URLCONF = 'ecommerce_dns.urls'
84
85TEMPLATES = [
86 {
87 'BACKEND': 'django.template.backends.django.DjangoTemplates',
88 'DIRS': [],
89 'APP_DIRS': True,
90 'OPTIONS': {
91 'context_processors': [
92 'django.template.context_processors.debug',
93 'django.template.context_processors.request',
94 'django.contrib.auth.context_processors.auth',
95 'django.contrib.messages.context_processors.messages',
96 ],
97 },
98 },
99]
100
101WSGI_APPLICATION = 'ecommerce_dns.wsgi.application'
102
103
104# Database
105# https://docs.djangoproject.com/en/3.2/ref/settings/#databases
106
107DATABASES = {
108 'default': {
109 'ENGINE': 'django.db.backends.postgresql',
110 'NAME': DB_NAME,
111 'USER': DB_USER,
112 'PASSWORD': DB_PASSWORD,
113 'HOST': DB_HOST,
114 'PORT': '5432',
115 'TEST': {
116 'NAME': TESTDB_NAME,
117 }
118 },
119 'database': {
120 'ENGINE': 'django.db.backends.postgresql',
121 'NAME': TESTDB_NAME,
122 'USER': DB_USER,
123 'PASSWORD': DB_PASSWORD,
124 'HOST': DB_HOST,
125 'PORT': '5432',
126 }
127}
128
129
130# Password validation
131# https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators
132
133AUTH_PASSWORD_VALIDATORS = [
134 {
135 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
136 },
137 {
138 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
139 },
140 {
141 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
142 },
143 {
144 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
145 },
146]
147
148
149# Internationalization
150# https://docs.djangoproject.com/en/3.2/topics/i18n/
151
152LANGUAGE_CODE = 'en-us'
153
154TIME_ZONE = 'UTC'
155
156USE_I18N = True
157
158USE_L10N = True
159
160USE_TZ = False
161
162
163# Static files (CSS, JavaScript, Images)
164# https://docs.djangoproject.com/en/3.2/howto/static-files/
165
166STATIC_URL = '/static/'
167MEDIA_URL = '/media/'
168MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
169
170if DEBUG:
171 STATIC_DIR = os.path.join(BASE_DIR, 'static')
172 STATICFILES_DIRS = [
173 STATIC_DIR,
174 '/var/www/static/',
175 ]
176else:
177 STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
178 STATICFILES_FINDERS = (
179 'django.contrib.staticfiles.finders.FileSystemFinder',
180 'django.contrib.staticfiles.finders.AppDirectoriesFinder',
181 )
182
183# Default primary key field type
184# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field
185AUTH_USER_MODEL = 'accounts.User'
186
187DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
188
189REST_FRAMEWORK = {
190 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
191 'PAGE_SIZE': 10,
192 'DEFAULT_AUTHENTICATION_CLASSES': (
193 'rest_framework_simplejwt.authentication.JWTAuthentication',
194 # 'rest_framework.authentication.SessionAuthentication',
195 # 'rest_framework.authentication.TokenAuthentication',
196 ),
197 'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
198 'DEFAULT_THROTTLE_CLASSES': [
199 'rest_framework.throttling.AnonRateThrottle',
200 'rest_framework.throttling.UserRateThrottle'
201 ],
202 'DEFAULT_THROTTLE_RATES': {
203 'anon': '100/day',
204 'user': '1000/day'
205 },
206}
207
208SPECTACULAR_SETTINGS = {
209 'TITLE': 'Your Project API',
210 'DESCRIPTION': 'Ecommerce shop API',
211 'VERSION': '1.0.0',
212}
213
214SIMPLE_JWT = {
215 'ACCESS_TOKEN_LIFETIME': timedelta(minutes=30),
216 'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
217 'ROTATE_REFRESH_TOKENS': True,
218 'BLACKLIST_AFTER_ROTATION': True,
219 'UPDATE_LAST_LOGIN': False,
220
221 'ALGORITHM': 'HS256',
222 'SIGNING_KEY': SECRET_KEY,
223 'VERIFYING_KEY': None,
224 'AUDIENCE': None,
225 'ISSUER': None,
226
227 'AUTH_HEADER_TYPES': ('Bearer',),
228 'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION',
229 'USER_ID_FIELD': 'id',
230 'USER_ID_CLAIM': 'user_id',
231 'USER_AUTHENTICATION_RULE': 'rest_framework_simplejwt.authentication.default_user_authentication_rule',
232
233 'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
234 'TOKEN_TYPE_CLAIM': 'token_type',
235
236 'JTI_CLAIM': 'jti',
237
238 'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp',
239 'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5),
240 'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1)
241}
242