Spaces:
Running
Running
| """ | |
| Django settings for solar_project project. | |
| Generated by 'django-admin startproject' using Django 6.0. | |
| For more information on this file, see | |
| https://docs.djangoproject.com/en/6.0/topics/settings/ | |
| For the full list of settings and their values, see | |
| https://docs.djangoproject.com/en/6.0/ref/settings/ | |
| """ | |
| from pathlib import Path | |
| import os | |
| # Build paths inside the project like this: BASE_DIR / 'subdir'. | |
| BASE_DIR = Path(__file__).resolve().parent.parent | |
| # Initialize environment variables | |
| # Load .env only when it exists (local dev). | |
| # On Render/production, env vars are injected by the platform — no .env file needed. | |
| from dotenv import load_dotenv | |
| _env_path = os.path.join(BASE_DIR, '.env') | |
| if os.path.isfile(_env_path): | |
| load_dotenv(_env_path) | |
| # Quick-start development settings - unsuitable for production | |
| # See https://docs.djangoproject.com/en/6.0/howto/deployment/checklist/ | |
| # SECURITY WARNING: keep the secret key used in production secret! | |
| SECRET_KEY = os.getenv('SECRET_KEY', '8c504a81f10a49729ce44af1b9a3b98d') | |
| # SECURITY WARNING: don't run with debug turned on in production! | |
| DEBUG = True | |
| ALLOWED_HOSTS = ["*"] | |
| STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') | |
| CORS_ALLOW_ALL_ORIGINS = True | |
| AUTH_USER_MODEL = 'solar_api.User' # CUSTOM USER MODEL with UUID ID | |
| # Application definition | |
| INSTALLED_APPS = [ | |
| "corsheaders", | |
| "django.contrib.auth", | |
| "django.contrib.contenttypes", | |
| "django.contrib.sessions", | |
| "django.contrib.messages", | |
| "django.contrib.staticfiles", | |
| 'solar_api', | |
| 'rest_framework', | |
| 'rest_framework_simplejwt', | |
| 'drf_yasg', | |
| ] | |
| MIDDLEWARE = [ | |
| "corsheaders.middleware.CorsMiddleware", | |
| "django.middleware.security.SecurityMiddleware", | |
| "whitenoise.middleware.WhiteNoiseMiddleware", | |
| "django.contrib.sessions.middleware.SessionMiddleware", | |
| "django.middleware.common.CommonMiddleware", | |
| "django.middleware.csrf.CsrfViewMiddleware", | |
| "django.contrib.auth.middleware.AuthenticationMiddleware", | |
| "django.contrib.messages.middleware.MessageMiddleware", | |
| ] | |
| ROOT_URLCONF = 'solar_project.urls' | |
| TEMPLATES = [ | |
| { | |
| 'BACKEND': 'django.template.backends.django.DjangoTemplates', | |
| 'DIRS': [], | |
| 'APP_DIRS': True, | |
| 'OPTIONS': { | |
| 'context_processors': [ | |
| 'django.template.context_processors.request', | |
| ], | |
| }, | |
| }, | |
| ] | |
| # REST Framework Configuration | |
| REST_FRAMEWORK = { | |
| 'DEFAULT_AUTHENTICATION_CLASSES': ( | |
| 'rest_framework_simplejwt.authentication.JWTAuthentication', | |
| ), | |
| 'DEFAULT_PERMISSION_CLASSES': [ | |
| 'rest_framework.permissions.IsAuthenticated', | |
| ], | |
| } | |
| from datetime import timedelta | |
| SIMPLE_JWT = { | |
| 'ACCESS_TOKEN_LIFETIME': timedelta(days=1), | |
| 'REFRESH_TOKEN_LIFETIME': timedelta(days=30), | |
| 'ALGORITHM': 'HS256', | |
| 'SIGNING_KEY': SECRET_KEY, | |
| } | |
| SWAGGER_SETTINGS = { | |
| 'USE_SESSION_AUTH': False, | |
| 'SECURITY_DEFINITIONS': { | |
| 'Bearer': { | |
| 'type': 'apiKey', | |
| 'name': 'Authorization', | |
| 'in': 'header', | |
| 'description': 'Enter your token as: Bearer <your_access_token>', | |
| }, | |
| }, | |
| 'DEFAULT_AUTO_SCHEMA_CLASS': 'drf_yasg.inspectors.SwaggerAutoSchema', | |
| } | |
| # Database | |
| # https://docs.djangoproject.com/en/6.0/ref/settings/#databases | |
| DATABASES = { | |
| "default": { | |
| "ENGINE": os.getenv("SQL_ENGINE", "django.db.backends.postgresql"), | |
| "NAME": os.getenv("SQL_DATABASE"), | |
| "USER": os.getenv("SQL_USER"), | |
| "PASSWORD": os.getenv("SQL_PASSWORD"), | |
| "HOST": os.getenv("SQL_DATABASE_HOST"), | |
| "PORT": os.getenv("SQL_DATABASE_PORT", "5432"), | |
| "CONN_MAX_AGE": 60, | |
| "OPTIONS": { | |
| "sslmode": "require", | |
| "connect_timeout": 5, | |
| }, | |
| } | |
| } | |
| # Password validation | |
| # https://docs.djangoproject.com/en/6.0/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/6.0/topics/i18n/ | |
| LANGUAGE_CODE = 'en-us' | |
| TIME_ZONE = 'UTC' | |
| USE_I18N = True | |
| USE_TZ = True | |
| # Static files (CSS, JavaScript, Images) | |
| # https://docs.djangoproject.com/en/6.0/howto/static-files/ | |
| STATIC_URL = 'static/' | |
| STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage' |