Modify: settings set casting default env vars change files path disable drf web render in prod

This commit is contained in:
Stepan Zhukovsky 2023-09-04 21:58:42 +09:00
parent 3aa887c5a4
commit 8971752e5b

View File

@ -3,16 +3,22 @@ from pathlib import Path
from datetime import timedelta from datetime import timedelta
env = environ.Env(
# set casting default value
DEBUG=(bool, False),
SECRET_KEY=(str, 'j9QGbvM9Z4otb47')
)
# Build paths inside the project like this: BASE_DIR / 'subdir'. # Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent BASE_DIR = Path(__file__).resolve().parent.parent
environ.Env.read_env(BASE_DIR / '.env') # Set default environ variables:
env = environ.Env(
# set casting default value
DEBUG=(bool, False),
SECRET_KEY=(str, 'j9QGbvM9Z4otb47'),
SQLITE_URL=(str, f'sqlite:///{BASE_DIR / "data/db.sqlite3"}'),
CSRF_TRUSTED_ORIGINS=(list, []),
ALLOWED_HOSTS=(list, ['*']),
TZ=(str, 'UTC'),
)
# Read .env file if exist:
environ.Env.read_env(BASE_DIR / '.env')
# SECURITY WARNING: keep the secret key used in production secret! # SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = env('SECRET_KEY') SECRET_KEY = env('SECRET_KEY')
@ -20,18 +26,13 @@ SECRET_KEY = env('SECRET_KEY')
# SECURITY WARNING: don't run with debug turned on in production! # SECURITY WARNING: don't run with debug turned on in production!
DEBUG = env('DEBUG') DEBUG = env('DEBUG')
ALLOWED_HOSTS = env.list("ALLOWED_HOSTS", default=["*"]) ALLOWED_HOSTS = env.list("ALLOWED_HOSTS")
# https://docs.djangoproject.com/en/4.2/ref/settings/#csrf-trusted-origins # https://docs.djangoproject.com/en/4.2/ref/settings/#csrf-trusted-origins
if not DEBUG: if not DEBUG:
CSRF_TRUSTED_ORIGINS = env.list("CSRF_TRUSTED_ORIGINS", default=[]) CSRF_TRUSTED_ORIGINS = env.list("CSRF_TRUSTED_ORIGINS")
# TODO: required for docker image
# CSRF_TRUSTED_ORIGINS = env.list("CSRF_TRUSTED_ORIGINS", default=["*"])
# Application definition # Application definition
INSTALLED_APPS = [ INSTALLED_APPS = [
'django.contrib.admin', 'django.contrib.admin',
'django.contrib.auth', 'django.contrib.auth',
@ -88,18 +89,12 @@ TEMPLATES = [
WSGI_APPLICATION = 'logs_collector.wsgi.application' WSGI_APPLICATION = 'logs_collector.wsgi.application'
# Database # Database
# https://docs.djangoproject.com/en/4.2/ref/settings/#databases # https://docs.djangoproject.com/en/4.2/ref/settings/#databases
DATABASES = { DATABASES = {
'default': env.db_url( 'default': env.db_url('SQLITE_URL')
'SQLITE_URL',
default=f'sqlite:///{BASE_DIR / "db.sqlite3"}'
)
} }
# Password validation # Password validation
# https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators # https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators
@ -118,19 +113,17 @@ AUTH_PASSWORD_VALIDATORS = [
}, },
] ]
# Internationalization # Internationalization
# https://docs.djangoproject.com/en/4.2/topics/i18n/ # https://docs.djangoproject.com/en/4.2/topics/i18n/
LANGUAGE_CODE = 'en-us' LANGUAGE_CODE = 'en-us'
TIME_ZONE = env('TZ', default='UTC') TIME_ZONE = env('TZ')
USE_I18N = True USE_I18N = True
USE_TZ = True USE_TZ = True
# Static files (CSS, JavaScript, Images) # Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.2/howto/static-files/ # https://docs.djangoproject.com/en/4.2/howto/static-files/
# Whitenoise: # Whitenoise:
@ -143,15 +136,14 @@ STATIC_ROOT = BASE_DIR / 'static'
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
MEDIA_ROOT = BASE_DIR / 'archives' MEDIA_ROOT = BASE_DIR / 'data/archives'
STORAGES = { STORAGES = {
# ...
"default": { "default": {
"BACKEND": "django.core.files.storage.FileSystemStorage", "BACKEND": "django.core.files.storage.FileSystemStorage",
"OPTIONS": { "OPTIONS": {
"location": MEDIA_ROOT, "location": MEDIA_ROOT,
"base_url": "/archives/", "base_url": "/download/archives/",
}, },
}, },
"staticfiles": { "staticfiles": {
@ -162,19 +154,15 @@ STORAGES = {
# django-crispy-forms and crispy-bootstrap5 # django-crispy-forms and crispy-bootstrap5
# https://django-crispy-forms.readthedocs.io/en/latest/ # https://django-crispy-forms.readthedocs.io/en/latest/
CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5" CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5"
CRISPY_TEMPLATE_PACK = "bootstrap5" CRISPY_TEMPLATE_PACK = "bootstrap5"
# https://www.django-rest-framework.org/api-guide/settings/ # https://www.django-rest-framework.org/api-guide/settings/
REST_FRAMEWORK = { REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': [ 'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer', 'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
], ],
'DEFAULT_PARSER_CLASSES': [ 'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser', 'rest_framework.parsers.JSONParser',
'rest_framework.renderers.BrowsableAPIRenderer',
'rest_framework.parsers.MultiPartParser' 'rest_framework.parsers.MultiPartParser'
], ],
'DEFAULT_AUTHENTICATION_CLASSES': [ 'DEFAULT_AUTHENTICATION_CLASSES': [
@ -188,9 +176,16 @@ REST_FRAMEWORK = {
# 'PAGE_SIZE': 3, # 'PAGE_SIZE': 3,
} }
if DEBUG:
REST_FRAMEWORK.get(
'DEFAULT_RENDERER_CLASSES', []
).append('rest_framework.renderers.BrowsableAPIRenderer')
REST_FRAMEWORK.get(
'DEFAULT_PARSER_CLASSES', []
).append('rest_framework.renderers.BrowsableAPIRenderer')
# https://drf-spectacular.readthedocs.io/en/latest/readme.html # https://drf-spectacular.readthedocs.io/en/latest/readme.html
# TODO: set environ vars config! # TODO: set environ vars config!
SPECTACULAR_SETTINGS = { SPECTACULAR_SETTINGS = {
'TITLE': 'Logs collector API', 'TITLE': 'Logs collector API',
'DESCRIPTION': 'Collector of archives with log files for further analysis', 'DESCRIPTION': 'Collector of archives with log files for further analysis',
@ -200,7 +195,6 @@ SPECTACULAR_SETTINGS = {
} }
# https://django-rest-framework-simplejwt.readthedocs.io/en/latest/ # https://django-rest-framework-simplejwt.readthedocs.io/en/latest/
SIMPLE_JWT = { SIMPLE_JWT = {
"ACCESS_TOKEN_LIFETIME": timedelta(minutes=60), "ACCESS_TOKEN_LIFETIME": timedelta(minutes=60),
"REFRESH_TOKEN_LIFETIME": timedelta(days=1), "REFRESH_TOKEN_LIFETIME": timedelta(days=1),