From ec350b1531b253c770bab78a276c2320fd49b534 Mon Sep 17 00:00:00 2001 From: S4NKALP Date: Sun, 28 Jun 2026 16:06:46 +0545 Subject: [PATCH] feat(config): add database connection options and cache backend Add connection pooling and Django cache using Database backend for session persistence to improve performance and reliability in production environments. --- config/settings/base.py | 30 +++++++++++++++++++++++++++--- config/settings/production.py | 8 ++++++++ 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/config/settings/base.py b/config/settings/base.py index 5198bbe..cc7af20 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -113,6 +113,7 @@ LOGIN_URL = "login" LOGIN_REDIRECT_URL = "dashboard" SESSION_SAVE_EVERY_REQUEST = True +SESSION_ENGINE = "django.contrib.sessions.backends.cached_db" # ── Internationalisation ────────────────────────────────────────────────────── @@ -130,6 +131,19 @@ STATICFILES_DIRS = [BASE_DIR / "static/"] MEDIA_URL = "/media/" MEDIA_ROOT = BASE_DIR / "media" +# ── Cache ────────────────────────────────────────────────────────────────── + +CACHES = { + "default": { + "BACKEND": "django.core.cache.backends.db.DatabaseCache", + "LOCATION": "django_cache", + } +} + +# ── Database ──────────────────────────────────────────────────────────────── + +CONN_MAX_AGE = env.int("CONN_MAX_AGE", default=600) + DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" # ── Tailwind ────────────────────────────────────────────────────────────────── @@ -153,6 +167,14 @@ REST_FRAMEWORK = { "rest_framework.filters.OrderingFilter", ), "DEFAULT_SCHEMA_CLASS": "drf_spectacular.openapi.AutoSchema", + "DEFAULT_THROTTLE_CLASSES": [ + "rest_framework.throttling.AnonRateThrottle", + "rest_framework.throttling.UserRateThrottle", + ], + "DEFAULT_THROTTLE_RATES": { + "anon": "100/hour", + "user": "1000/hour", + }, } SIMPLE_JWT = { @@ -211,10 +233,12 @@ SPECTACULAR_SETTINGS = { Q_CLUSTER = { "name": "project_management", - "workers": 2, - "timeout": 60, # seconds before a task is killed - "retry": 120, # seconds before a failed task is retried (must be > timeout) + "workers": env.int("Q_WORKERS", default=2), + "timeout": 60, + "retry": 120, "queue_limit": 50, "bulk": 10, "orm": "default", + "poll": 2000, + "recycle": 500, } diff --git a/config/settings/production.py b/config/settings/production.py index 3b5f5e3..be143d1 100644 --- a/config/settings/production.py +++ b/config/settings/production.py @@ -18,6 +18,14 @@ DATABASES = { "PASSWORD": env("DB_PASSWORD"), "HOST": env("DB_HOST"), "PORT": env("DB_PORT", default="3306"), + "CONN_MAX_AGE": 600, + "OPTIONS": { + "charset": "utf8mb4", + "sql_mode": "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION", + "connect_timeout": 10, + "read_timeout": 30, + "write_timeout": 30, + }, } }