| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304 |
- """
- Django settings for lux_backend project.
- Generated by 'django-admin startproject' using Django 4.2.23.
- For more information on this file, see
- https://docs.djangoproject.com/en/4.2/topics/settings/
- For the full list of settings and their values, see
- https://docs.djangoproject.com/en/4.2/ref/settings/
- """
- from pathlib import Path
- import os
- from dotenv import load_dotenv
- load_dotenv()
- # Build paths inside the project like this: BASE_DIR / 'subdir'.
- BASE_DIR = Path(__file__).resolve().parent.parent
- # Quick-start development settings - unsuitable for production
- # See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/
- # SECURITY WARNING: keep the secret key used in production secret!
- SECRET_KEY = os.getenv('SECRET_KEY')
- # SECURITY WARNING: don't run with debug turned on in production!
- DEBUG = os.getenv('DEBUG') == '1'
- ALLOWED_HOSTS = [h for h in os.getenv('ALLOWED_HOSTS', 'localhost,127.0.0.1,.lvh.me').split(',') if h]
- # CSRF trusted origins must include scheme and port when applicable
- _csrf_env = os.getenv('CSRF_TRUSTED_ORIGINS', '')
- if _csrf_env:
- CSRF_TRUSTED_ORIGINS = [o for o in _csrf_env.split(',') if o]
- else:
- CSRF_TRUSTED_ORIGINS = [
- 'http://localhost:8000',
- 'http://127.0.0.1:8000',
- 'http://localhost:8024',
- 'http://127.0.0.1:8024',
- 'http://*.lvh.me:8000',
- 'http://*.lvh.me:8024',
- ]
- # Application definition
- INSTALLED_APPS = [
- 'django.contrib.admin',
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.messages',
- 'django.contrib.sites',
- 'rest_framework',
- 'djoser',
- 'drf_spectacular',
- 'django_filters',
- 'taggit',
- 'mptt',
- 'tailwind',
- 'crispy_forms',
- 'crispy_tailwind',
- 'markdownfield',
- 'npm',
- 'django.contrib.staticfiles',
- 'allauth',
- 'allauth.account',
- 'allauth.socialaccount',
- 'allauth.socialaccount.providers.google',
- 'allauth.socialaccount.providers.facebook',
- 'allauth.socialaccount.providers.line',
- 'widget_tweaks',
- 'orgs',
- 'public_frontend',
- 'theme',
- 'settings',
- 'admin_frontend',
- 'frontend',
- 'api',
- 'cms',
- 'recycle_core'
- ]
- if DEBUG:
- # Add django_browser_reload only in DEBUG mode
- INSTALLED_APPS += ['django_browser_reload', 'django_extensions']
- TAILWIND_APP_NAME = 'theme'
- # django-crispy-forms (Tailwind)
- CRISPY_ALLOWED_TEMPLATE_PACKS = "tailwind"
- CRISPY_TEMPLATE_PACK = "tailwind"
- STATICFILES_DIRS = [
- BASE_DIR / "static",
- ]
- # Staticfiles finders (include npm finder)
- STATICFILES_FINDERS = [
- 'django.contrib.staticfiles.finders.FileSystemFinder',
- 'django.contrib.staticfiles.finders.AppDirectoriesFinder',
- 'npm.finders.NpmFinder',
- ]
- # django-npm settings
- NPM_ROOT_PATHS = [
- BASE_DIR, # directory containing package.json
- ]
- # Map npm packages to files to expose via staticfiles
- NPM_FILE_PATTERNS = {
- # JS UI libs
- 'flowbite': ['dist/flowbite.min.js', 'dist/flowbite.min.css'],
- 'alpinejs': ['dist/cdn.min.js'],
- }
- MIDDLEWARE = [
- 'django.middleware.security.SecurityMiddleware',
- 'django.contrib.sessions.middleware.SessionMiddleware',
- 'django.middleware.common.CommonMiddleware',
- 'django.middleware.csrf.CsrfViewMiddleware',
- 'django.contrib.auth.middleware.AuthenticationMiddleware',
- 'ecoloop.middleware.WebAdminAuthRedirectMiddleware',
- 'orgs.middleware.CurrentOrganizationMiddleware',
- 'django.contrib.messages.middleware.MessageMiddleware',
- 'django.middleware.clickjacking.XFrameOptionsMiddleware',
- "allauth.account.middleware.AccountMiddleware",
- ]
- if DEBUG:
- # Add django_browser_reload middleware only in DEBUG mode
- MIDDLEWARE += [
- "django_browser_reload.middleware.BrowserReloadMiddleware",
- ]
- ROOT_URLCONF = 'ecoloop.urls'
- TEMPLATES = [
- {
- 'BACKEND': 'django.template.backends.django.DjangoTemplates',
- 'DIRS': [BASE_DIR / 'templates'],
- 'APP_DIRS': True,
- 'OPTIONS': {
- 'context_processors': [
- 'django.template.context_processors.debug',
- 'django.template.context_processors.request',
- 'django.contrib.auth.context_processors.auth',
- 'django.contrib.messages.context_processors.messages',
- 'ecoloop.context_processors.current_site',
- ],
- },
- },
- ]
- WSGI_APPLICATION = 'ecoloop.wsgi.application'
- # Database
- # https://docs.djangoproject.com/en/4.2/ref/settings/#databases
- DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.postgresql',
- 'NAME': os.getenv('DB_NAME'),
- 'USER': os.getenv('DB_USER'),
- 'PASSWORD': os.getenv('DB_PASSWORD'),
- 'HOST': os.getenv('DB_HOST'),
- 'PORT': os.getenv('DB_PORT'),
- }
- }
- # Password validation
- # https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators
- AUTH_PASSWORD_VALIDATORS = [
- {
- 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
- },
- {
- 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
- },
- {
- 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
- },
- {
- 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
- },
- ]
- # Internationalization
- # https://docs.djangoproject.com/en/4.2/topics/i18n/
- LANGUAGE_CODE = 'en-us'
- # Set application timezone to Bangkok (Asia/Bangkok)
- TIME_ZONE = 'Asia/Bangkok'
- USE_I18N = True
- USE_TZ = True
- # Static and media files
- # https://docs.djangoproject.com/en/4.2/howto/static-files/
- STATIC_URL = 'static/'
- # Media (uploaded) files
- MEDIA_URL = '/media/'
- MEDIA_ROOT = BASE_DIR / 'media'
- STATIC_ROOT = os.path.join(BASE_DIR, "staticfiles")
- # Default primary key field type
- # https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field
- DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
- REST_FRAMEWORK = {
- 'DEFAULT_AUTHENTICATION_CLASSES': (
- 'rest_framework_simplejwt.authentication.JWTAuthentication',
- ),
- 'DEFAULT_FILTER_BACKENDS': (
- 'django_filters.rest_framework.DjangoFilterBackend',
- ),
- 'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
- }
- SPECTACULAR_SETTINGS = {
- 'TITLE': 'Ecoloop API',
- 'DESCRIPTION': 'API for the Ecoloop recycling management system.',
- 'VERSION': '1.0.0',
- 'SERVE_INCLUDE_SCHEMA': False,
- }
- # Auth redirects
- LOGIN_URL = '/webadmin/login/'
- LOGIN_REDIRECT_URL = '/webadmin/'
- # Taggit behavior
- TAGGIT_CASE_INSENSITIVE = True
- # django-allauth config
- SITE_ID = 1
- AUTHENTICATION_BACKENDS = [
- 'django.contrib.auth.backends.ModelBackend',
- 'allauth.account.auth_backends.AuthenticationBackend',
- ]
- SOCIALACCOUNT_PROVIDERS = {
- 'google': {
- 'APP': {
- 'client_id': os.getenv('GOOGLE_CLIENT_ID'),
- 'secret': os.getenv('GOOGLE_CLIENT_SECRET'),
- 'key': ''
- },
- 'SCOPE': [
- 'profile',
- 'email',
- ],
- 'AUTH_PARAMS': {
- 'access_type': 'online',
- }
- },
- 'line': {
- 'APP': {
- 'client_id': os.getenv('LINE_LOGIN_CHANNEL_ID'),
- 'secret': os.getenv('LINE_LOGIN_CHANNEL_SECRET')
- },
- "SCOPE": ['profile', 'openid', 'email']
- },
- 'facebook': {
- 'METHOD': 'oauth2', # Set to 'js_sdk' to use the Facebook connect SDK
- 'SDK_URL': '//connect.facebook.net/{locale}/sdk.js',
- 'SCOPE': ['email', 'public_profile'],
- 'AUTH_PARAMS': {'auth_type': 'reauthenticate'},
- 'INIT_PARAMS': {'cookie': True},
- 'FIELDS': [
- 'id',
- 'first_name',
- 'last_name',
- 'middle_name',
- 'name',
- 'name_format',
- 'picture',
- 'short_name'
- ],
- 'EXCHANGE_TOKEN': True,
- 'LOCALE_FUNC': 'path.to.callable',
- 'VERIFIED_EMAIL': False,
- 'VERSION': 'v13.0',
- 'GRAPH_API_URL': 'https://graph.facebook.com/v13.0',
- }
- }
- SITE_URL = "http://localhost:8000/"
|