1 line
178 KiB
JSON
1 line
178 KiB
JSON
{"repo": "bab4ni/jaba", "files": {"backend/main/main/settings.py": {"223cd796e930f4f5ee33cfb7a37ce206662d039c": {"t": 1785746916.7352595, "n": 8891, "h": "f616b9aea1d3f2fc", "c": "from dotenv import load_dotenv\nfrom pathlib import Path\nimport os\nfrom datetime import timedelta\n\n\nload_dotenv(\".env\")\n# Build paths inside the project like this: BASE_DIR / 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\nAUTH_USER_MODEL = \"registration.User\"\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = os.getenv(\"SECRET_KEY\")\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\n\nALLOWED_HOSTS = [\"*\"]\n# Application definition\n\nINSTALLED_APPS = [\n \"django.contrib.admin\",\n \"django.contrib.auth\",\n \"django.contrib.contenttypes\",\n \"django.contrib.sessions\",\n \"django.contrib.messages\",\n \"django.contrib.staticfiles\",\n \"rest_framework\",\n \"registration\",\n \"user_profile\",\n \"courses\",\n \"corsheaders\",\n \"rest_framework_simplejwt\",\n \"drf_yasg\",\n \"news\",\n \"Ai\",\n \"comments\",\n \"content\",\n \"progress\",\n]\n\nMIDDLEWARE = [\n \"django.middleware.security.SecurityMiddleware\",\n \"django.contrib.sessions.middleware.SessionMiddleware\",\n \"django.middleware.common.CommonMiddleware\",\n \"django.middleware.csrf.CsrfViewMiddleware\",\n \"django.contrib.auth.middleware.AuthenticationMiddleware\",\n \"django.contrib.messages.middleware.MessageMiddleware\",\n \"django.middleware.clickjacking.XFrameOptionsMiddleware\",\n \"corsheaders.middleware.CorsMiddleware\",\n]\n\nROOT_URLCONF = \"main.urls\"\nFRONTEND_URL = \"http://localhost:5173\"\nPASSWORD_RESET_TIMEOUT = 24 * 60 * 60\nCORS_ALLOWED_ORIGINS = [\n \"https://admlab.site\",\n \"http://admlab.site\",\n \"https://localhost\",\n \"https://localhost:80\",\n \"https://localhost:443\",\n \"https://localhost:5173\",\n \"https://127.0.0.1\",\n \"https://127.0.0.1:8000\",\n \"https://0.0.0.0\",\n \"http://localhost\",\n \"http://localhost:80\",\n \"http://localhost:443\",\n \"http://localhost:5173\",\n \"http://127.0.0.1\",\n \"http://127.0.0.1:8000\",\n \"http://0.0.0.0\",\n]\n\n# Add CORS settings to allow all methods including DELETE\nCORS_ALLOW_METHODS = [\n \"DELETE\",\n \"GET\",\n \"OPTIONS\",\n \"PATCH\",\n \"POST\",\n \"PUT\",\n]\nCORS_ALLOW_HEADERS = [\n \"accept\",\n \"accept-encoding\",\n \"authorization\",\n \"content-type\",\n \"dnt\",\n \"origin\",\n \"user-agent\",\n \"x-csrftoken\",\n \"x-requested-with\",\n \"*\",\n]\nCORS_ALLOW_CREDENTIALS = True\n\nTEMPLATES = [\n {\n \"BACKEND\": \"django.template.backends.django.DjangoTemplates\",\n \"DIRS\": [os.path.join(BASE_DIR, \"templates\")],\n \"APP_DIRS\": True,\n \"OPTIONS\": {\n \"context_processors\": [\n \"django.template.context_processors.debug\",\n \"django.template.context_processors.request\",\n \"django.contrib.auth.context_processors.auth\",\n \"django.contrib.messages.context_processors.messages\",\n ],\n },\n },\n]\n\nWSGI_APPLICATION = \"main.wsgi.application\"\n\n\n# Database\n# https://docs.djangoproject.com/en/5.1/ref/settings/#databases\n\nDATABASES = {\n \"default\": {\n \"ENGINE\": \"django.db.backends.postgresql\",\n \"NAME\": os.getenv(\"DB_NAME\"),\n \"USER\": os.getenv(\"DB_USER\"),\n \"PASSWORD\": os.getenv(\"DB_PASSWORD\"),\n \"HOST\": os.getenv(\"DB_HOST\"),\n \"PORT\": os.getenv(\"DB_PORT\"),\n }\n}\n\n# Password validation\n# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n {\n \"NAME\": \"django.contrib.auth.password_validation.UserAttributeSimilarityValidator\",\n },\n {\n \"NAME\": \"django.contrib.auth.password_validation.MinimumLengthValidator\",\n },\n {\n \"NAME\": \"django.contrib.auth.password_validation.CommonPasswordValidator\",\n },\n {\n \"NAME\": \"django.contrib.auth.password_validation.NumericPasswordValidator\",\n },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/5.1/topics/i18n/\n\nLANGUAGE_CODE = \"en-us\"\n\nTIME_ZONE = \"UTC\"\n\nUSE_I18N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.1/howto/static-files/\n\nSTATIC_URL = \"/static/\"\nSTATIC_ROOT = os.path.join(BASE_DIR, \"staticfiles\")\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field\n\nDEFAULT_AUTO_FIELD = \"django.db.models.BigAutoField\"\n\n# Set APPEND_SLASH to False to prevent Django from redirecting URLs with trailing slashes\n# This fixes issues with DELETE requests\nAPPEND_SLASH = False\n\n# Для тестирования (вывод писем в консоль)\nEMAIL_BACKEND = \"django.core.mail.backends.smtp.EmailBackend\"\n\n# Или для реальной отправки (настройте под ваш SMTP)\nEMAIL_HOST = os.getenv(\"EMAIL_HOST\")\nEMAIL_PORT = os.getenv(\"EMAIL_PORT\")\nEMAIL_USE_TLS = os.getenv(\"EMAIL_USE_TLS\")\nEMAIL_HOST_USER = os.getenv(\"EMAIL_HOST_USER\")\nEMAIL_HOST_PASSWORD = os.getenv(\"EMAIL_HOST_PASSWORD\")\nDEFAULT_FROM_EMAIL = EMAIL_HOST_USER\n\nREST_FRAMEWORK = {\n \"DEFAULT_AUTHENTICATION_CLASSES\": (\n \"rest_framework.authentication.TokenAuthentication\",\n \"rest_framework_simplejwt.authentication.JWTAuthentication\",\n ),\n \"DEFAULT_PERMISSION_CLASSES\": (\"rest_framework.permissions.AllowAny\",),\n \"DEFAULT_PARSER_CLASSES\": [\n \"rest_framework.parsers.JSONParser\",\n \"rest_framework.parsers.MultiPartParser\",\n \"rest_framework.parsers.FormParser\",\n ],\n}\n\n\nSIMPLE_JWT = {\n \"ACCESS_TOKEN_LIFETIME\": timedelta(days=1),\n \"REFRESH_TOKEN_LIFETIME\": timedelta(days=2),\n \"ROTATE_REFRESH_TOKENS\": False,\n \"BLACKLIST_AFTER_ROTATION\": True,\n \"UPDATE_LAST_LOGIN\": False,\n \"ALGORITHM\": \"HS256\",\n \"SIGNING_KEY\": SECRET_KEY,\n \"VERIFYING_KEY\": \"\",\n \"AUDIENCE\": None,\n \"ISSUER\": None,\n \"JSON_ENCODER\": None,\n \"JWK_URL\": None,\n \"LEEWAY\": 0,\n \"AUTH_HEADER_TYPES\": (\"Bearer\",),\n \"AUTH_HEADER_NAME\": \"HTTP_AUTHORIZATION\",\n \"USER_ID_FIELD\": \"id\",\n \"USER_ID_CLAIM\": \"user_id\",\n \"USER_AUTHENTICATION_RULE\": \"rest_framework_simplejwt.authentication.default_user_authentication_rule\",\n \"AUTH_TOKEN_CLASSES\": (\"rest_framework_simplejwt.tokens.AccessToken\",),\n \"TOKEN_TYPE_CLAIM\": \"token_type\",\n \"TOKEN_USER_CLASS\": \"rest_framework_simplejwt.models.TokenUser\",\n \"JTI_CLAIM\": \"jti\",\n \"SLIDING_TOKEN_REFRESH_EXP_CLAIM\": \"refresh_exp\",\n \"SLIDING_TOKEN_LIFETIME\": timedelta(minutes=1),\n \"SLIDING_TOKEN_REFRESH_LIFETIME\": timedelta(days=2),\n \"TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainPairSerializer\",\n \"TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSerializer\",\n \"TOKEN_VERIFY_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenVerifySerializer\",\n \"TOKEN_BLACKLIST_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenBlacklistSerializer\",\n \"SLIDING_TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainSlidingSerializer\",\n \"SLIDING_TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSlidingSerializer\",\n}\n\n# Media files (Uploaded files)\nMEDIA_URL = \"/media/\"\nMEDIA_ROOT = os.path.join(BASE_DIR, \"media\")\n\nJUDGE0_LANGUAGE_IDS = {\n \"javascript\": {\n \"default\": 63, # Node.js\n \"node\": 63,\n },\n \"python\": {\n \"default\": 71, # CPython 3.8.1\n \"cpython\": 71,\n \"pypy\": 99, # PyPy 7.3.0\n },\n \"java\": {\n \"default\": 62, # OpenJDK 13.0.1\n \"openjdk\": 62,\n },\n \"kotlin\": {\n \"default\": 78, # Kotlin 1.3.70\n \"kotlin-jvm\": 78,\n },\n \"go\": {\n \"default\": 60, # Go 1.13.5\n \"go\": 60,\n },\n \"rust\": {\n \"default\": 73, # Rust 1.40.0\n \"rustc\": 73,\n },\n \"cpp\": {\n \"default\": 54, # GCC 9.2.0 (C++)\n \"g++\": 54,\n },\n \"csharp\": {\n \"default\": 51, # Mono C# 6.8.0\n \"mono\": 51,\n },\n \"php\": {\n \"default\": 68, # PHP 7.4.1\n \"php\": 68,\n },\n \"ruby\": {\n \"default\": 72, # Ruby 2.7.0\n \"mri\": 72,\n },\n \"swift\": {\n \"default\": 83, # Swift 5.2.3\n \"swift\": 83,\n },\n \"scala\": {\n \"default\": 81, # Scala 2.13.2\n \"scala\": 81,\n },\n}\n\nJUDGE0_API_URL = os.getenv(\"JUDGE0_API_URL\")\nJUDGE0_API_KEY = os.getenv(\"JUDGE0_API_KEY\")\nDEEPSEEK_API_KEY = \"sk-844822d9c2214b1ab1288181a903118c\"\n\n# Logging configuration\nLOGGING = {\n \"version\": 1,\n \"disable_existing_loggers\": False,\n \"formatters\": {\n \"verbose\": {\n \"format\": \"{levelname} {asctime} {module} {message}\",\n \"style\": \"{\",\n },\n },\n \"handlers\": {\n \"console\": {\n \"class\": \"logging.StreamHandler\",\n \"formatter\": \"verbose\",\n },\n },\n \"loggers\": {\n \"news\": {\n \"handlers\": [\"console\"],\n \"level\": \"INFO\",\n \"propagate\": True,\n },\n },\n}\n"}, "9a8c26ee826b314bba001506c851c040d603dda6": {"t": 1785768941.5428498, "n": 8891, "h": "f616b9aea1d3f2fc", "c": "from dotenv import load_dotenv\nfrom pathlib import Path\nimport os\nfrom datetime import timedelta\n\n\nload_dotenv(\".env\")\n# Build paths inside the project like this: BASE_DIR / 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\nAUTH_USER_MODEL = \"registration.User\"\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = os.getenv(\"SECRET_KEY\")\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\n\nALLOWED_HOSTS = [\"*\"]\n# Application definition\n\nINSTALLED_APPS = [\n \"django.contrib.admin\",\n \"django.contrib.auth\",\n \"django.contrib.contenttypes\",\n \"django.contrib.sessions\",\n \"django.contrib.messages\",\n \"django.contrib.staticfiles\",\n \"rest_framework\",\n \"registration\",\n \"user_profile\",\n \"courses\",\n \"corsheaders\",\n \"rest_framework_simplejwt\",\n \"drf_yasg\",\n \"news\",\n \"Ai\",\n \"comments\",\n \"content\",\n \"progress\",\n]\n\nMIDDLEWARE = [\n \"django.middleware.security.SecurityMiddleware\",\n \"django.contrib.sessions.middleware.SessionMiddleware\",\n \"django.middleware.common.CommonMiddleware\",\n \"django.middleware.csrf.CsrfViewMiddleware\",\n \"django.contrib.auth.middleware.AuthenticationMiddleware\",\n \"django.contrib.messages.middleware.MessageMiddleware\",\n \"django.middleware.clickjacking.XFrameOptionsMiddleware\",\n \"corsheaders.middleware.CorsMiddleware\",\n]\n\nROOT_URLCONF = \"main.urls\"\nFRONTEND_URL = \"http://localhost:5173\"\nPASSWORD_RESET_TIMEOUT = 24 * 60 * 60\nCORS_ALLOWED_ORIGINS = [\n \"https://admlab.site\",\n \"http://admlab.site\",\n \"https://localhost\",\n \"https://localhost:80\",\n \"https://localhost:443\",\n \"https://localhost:5173\",\n \"https://127.0.0.1\",\n \"https://127.0.0.1:8000\",\n \"https://0.0.0.0\",\n \"http://localhost\",\n \"http://localhost:80\",\n \"http://localhost:443\",\n \"http://localhost:5173\",\n \"http://127.0.0.1\",\n \"http://127.0.0.1:8000\",\n \"http://0.0.0.0\",\n]\n\n# Add CORS settings to allow all methods including DELETE\nCORS_ALLOW_METHODS = [\n \"DELETE\",\n \"GET\",\n \"OPTIONS\",\n \"PATCH\",\n \"POST\",\n \"PUT\",\n]\nCORS_ALLOW_HEADERS = [\n \"accept\",\n \"accept-encoding\",\n \"authorization\",\n \"content-type\",\n \"dnt\",\n \"origin\",\n \"user-agent\",\n \"x-csrftoken\",\n \"x-requested-with\",\n \"*\",\n]\nCORS_ALLOW_CREDENTIALS = True\n\nTEMPLATES = [\n {\n \"BACKEND\": \"django.template.backends.django.DjangoTemplates\",\n \"DIRS\": [os.path.join(BASE_DIR, \"templates\")],\n \"APP_DIRS\": True,\n \"OPTIONS\": {\n \"context_processors\": [\n \"django.template.context_processors.debug\",\n \"django.template.context_processors.request\",\n \"django.contrib.auth.context_processors.auth\",\n \"django.contrib.messages.context_processors.messages\",\n ],\n },\n },\n]\n\nWSGI_APPLICATION = \"main.wsgi.application\"\n\n\n# Database\n# https://docs.djangoproject.com/en/5.1/ref/settings/#databases\n\nDATABASES = {\n \"default\": {\n \"ENGINE\": \"django.db.backends.postgresql\",\n \"NAME\": os.getenv(\"DB_NAME\"),\n \"USER\": os.getenv(\"DB_USER\"),\n \"PASSWORD\": os.getenv(\"DB_PASSWORD\"),\n \"HOST\": os.getenv(\"DB_HOST\"),\n \"PORT\": os.getenv(\"DB_PORT\"),\n }\n}\n\n# Password validation\n# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n {\n \"NAME\": \"django.contrib.auth.password_validation.UserAttributeSimilarityValidator\",\n },\n {\n \"NAME\": \"django.contrib.auth.password_validation.MinimumLengthValidator\",\n },\n {\n \"NAME\": \"django.contrib.auth.password_validation.CommonPasswordValidator\",\n },\n {\n \"NAME\": \"django.contrib.auth.password_validation.NumericPasswordValidator\",\n },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/5.1/topics/i18n/\n\nLANGUAGE_CODE = \"en-us\"\n\nTIME_ZONE = \"UTC\"\n\nUSE_I18N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.1/howto/static-files/\n\nSTATIC_URL = \"/static/\"\nSTATIC_ROOT = os.path.join(BASE_DIR, \"staticfiles\")\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field\n\nDEFAULT_AUTO_FIELD = \"django.db.models.BigAutoField\"\n\n# Set APPEND_SLASH to False to prevent Django from redirecting URLs with trailing slashes\n# This fixes issues with DELETE requests\nAPPEND_SLASH = False\n\n# Для тестирования (вывод писем в консоль)\nEMAIL_BACKEND = \"django.core.mail.backends.smtp.EmailBackend\"\n\n# Или для реальной отправки (настройте под ваш SMTP)\nEMAIL_HOST = os.getenv(\"EMAIL_HOST\")\nEMAIL_PORT = os.getenv(\"EMAIL_PORT\")\nEMAIL_USE_TLS = os.getenv(\"EMAIL_USE_TLS\")\nEMAIL_HOST_USER = os.getenv(\"EMAIL_HOST_USER\")\nEMAIL_HOST_PASSWORD = os.getenv(\"EMAIL_HOST_PASSWORD\")\nDEFAULT_FROM_EMAIL = EMAIL_HOST_USER\n\nREST_FRAMEWORK = {\n \"DEFAULT_AUTHENTICATION_CLASSES\": (\n \"rest_framework.authentication.TokenAuthentication\",\n \"rest_framework_simplejwt.authentication.JWTAuthentication\",\n ),\n \"DEFAULT_PERMISSION_CLASSES\": (\"rest_framework.permissions.AllowAny\",),\n \"DEFAULT_PARSER_CLASSES\": [\n \"rest_framework.parsers.JSONParser\",\n \"rest_framework.parsers.MultiPartParser\",\n \"rest_framework.parsers.FormParser\",\n ],\n}\n\n\nSIMPLE_JWT = {\n \"ACCESS_TOKEN_LIFETIME\": timedelta(days=1),\n \"REFRESH_TOKEN_LIFETIME\": timedelta(days=2),\n \"ROTATE_REFRESH_TOKENS\": False,\n \"BLACKLIST_AFTER_ROTATION\": True,\n \"UPDATE_LAST_LOGIN\": False,\n \"ALGORITHM\": \"HS256\",\n \"SIGNING_KEY\": SECRET_KEY,\n \"VERIFYING_KEY\": \"\",\n \"AUDIENCE\": None,\n \"ISSUER\": None,\n \"JSON_ENCODER\": None,\n \"JWK_URL\": None,\n \"LEEWAY\": 0,\n \"AUTH_HEADER_TYPES\": (\"Bearer\",),\n \"AUTH_HEADER_NAME\": \"HTTP_AUTHORIZATION\",\n \"USER_ID_FIELD\": \"id\",\n \"USER_ID_CLAIM\": \"user_id\",\n \"USER_AUTHENTICATION_RULE\": \"rest_framework_simplejwt.authentication.default_user_authentication_rule\",\n \"AUTH_TOKEN_CLASSES\": (\"rest_framework_simplejwt.tokens.AccessToken\",),\n \"TOKEN_TYPE_CLAIM\": \"token_type\",\n \"TOKEN_USER_CLASS\": \"rest_framework_simplejwt.models.TokenUser\",\n \"JTI_CLAIM\": \"jti\",\n \"SLIDING_TOKEN_REFRESH_EXP_CLAIM\": \"refresh_exp\",\n \"SLIDING_TOKEN_LIFETIME\": timedelta(minutes=1),\n \"SLIDING_TOKEN_REFRESH_LIFETIME\": timedelta(days=2),\n \"TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainPairSerializer\",\n \"TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSerializer\",\n \"TOKEN_VERIFY_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenVerifySerializer\",\n \"TOKEN_BLACKLIST_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenBlacklistSerializer\",\n \"SLIDING_TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainSlidingSerializer\",\n \"SLIDING_TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSlidingSerializer\",\n}\n\n# Media files (Uploaded files)\nMEDIA_URL = \"/media/\"\nMEDIA_ROOT = os.path.join(BASE_DIR, \"media\")\n\nJUDGE0_LANGUAGE_IDS = {\n \"javascript\": {\n \"default\": 63, # Node.js\n \"node\": 63,\n },\n \"python\": {\n \"default\": 71, # CPython 3.8.1\n \"cpython\": 71,\n \"pypy\": 99, # PyPy 7.3.0\n },\n \"java\": {\n \"default\": 62, # OpenJDK 13.0.1\n \"openjdk\": 62,\n },\n \"kotlin\": {\n \"default\": 78, # Kotlin 1.3.70\n \"kotlin-jvm\": 78,\n },\n \"go\": {\n \"default\": 60, # Go 1.13.5\n \"go\": 60,\n },\n \"rust\": {\n \"default\": 73, # Rust 1.40.0\n \"rustc\": 73,\n },\n \"cpp\": {\n \"default\": 54, # GCC 9.2.0 (C++)\n \"g++\": 54,\n },\n \"csharp\": {\n \"default\": 51, # Mono C# 6.8.0\n \"mono\": 51,\n },\n \"php\": {\n \"default\": 68, # PHP 7.4.1\n \"php\": 68,\n },\n \"ruby\": {\n \"default\": 72, # Ruby 2.7.0\n \"mri\": 72,\n },\n \"swift\": {\n \"default\": 83, # Swift 5.2.3\n \"swift\": 83,\n },\n \"scala\": {\n \"default\": 81, # Scala 2.13.2\n \"scala\": 81,\n },\n}\n\nJUDGE0_API_URL = os.getenv(\"JUDGE0_API_URL\")\nJUDGE0_API_KEY = os.getenv(\"JUDGE0_API_KEY\")\nDEEPSEEK_API_KEY = \"sk-844822d9c2214b1ab1288181a903118c\"\n\n# Logging configuration\nLOGGING = {\n \"version\": 1,\n \"disable_existing_loggers\": False,\n \"formatters\": {\n \"verbose\": {\n \"format\": \"{levelname} {asctime} {module} {message}\",\n \"style\": \"{\",\n },\n },\n \"handlers\": {\n \"console\": {\n \"class\": \"logging.StreamHandler\",\n \"formatter\": \"verbose\",\n },\n },\n \"loggers\": {\n \"news\": {\n \"handlers\": [\"console\"],\n \"level\": \"INFO\",\n \"propagate\": True,\n },\n },\n}\n"}, "c00c77920baca9c269f0213cf932a66c7b328ccb": {"t": 1785768944.7196429, "n": 8860, "h": "4773413116c7fd64", "c": "from dotenv import load_dotenv\nfrom pathlib import Path\nimport os\nfrom datetime import timedelta\n\n\nload_dotenv(\".env\")\n# Build paths inside the project like this: BASE_DIR / 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\nAUTH_USER_MODEL = \"registration.User\"\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = os.getenv(\"SECRET_KEY\")\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\n\nALLOWED_HOSTS = [\"*\"]\n# Application definition\n\nINSTALLED_APPS = [\n \"django.contrib.admin\",\n \"django.contrib.auth\",\n \"django.contrib.contenttypes\",\n \"django.contrib.sessions\",\n \"django.contrib.messages\",\n \"django.contrib.staticfiles\",\n \"rest_framework\",\n \"registration\",\n \"user_profile\",\n \"courses\",\n \"corsheaders\",\n \"rest_framework_simplejwt\",\n \"drf_yasg\",\n \"news\",\n \"Ai\",\n \"comments\",\n]\n\nMIDDLEWARE = [\n \"django.middleware.security.SecurityMiddleware\",\n \"django.contrib.sessions.middleware.SessionMiddleware\",\n \"django.middleware.common.CommonMiddleware\",\n \"django.middleware.csrf.CsrfViewMiddleware\",\n \"django.contrib.auth.middleware.AuthenticationMiddleware\",\n \"django.contrib.messages.middleware.MessageMiddleware\",\n \"django.middleware.clickjacking.XFrameOptionsMiddleware\",\n \"corsheaders.middleware.CorsMiddleware\",\n]\n\nROOT_URLCONF = \"main.urls\"\nFRONTEND_URL = \"http://localhost:5173\"\nPASSWORD_RESET_TIMEOUT = 24 * 60 * 60\nCORS_ALLOWED_ORIGINS = [\n \"https://admlab.site\",\n \"http://admlab.site\",\n \"https://localhost\",\n \"https://localhost:80\",\n \"https://localhost:443\",\n \"https://localhost:5173\",\n \"https://127.0.0.1\",\n \"https://127.0.0.1:8000\",\n \"https://0.0.0.0\",\n \"http://localhost\",\n \"http://localhost:80\",\n \"http://localhost:443\",\n \"http://localhost:5173\",\n \"http://127.0.0.1\",\n \"http://127.0.0.1:8000\",\n \"http://0.0.0.0\",\n]\n\n# Add CORS settings to allow all methods including DELETE\nCORS_ALLOW_METHODS = [\n \"DELETE\",\n \"GET\",\n \"OPTIONS\",\n \"PATCH\",\n \"POST\",\n \"PUT\",\n]\nCORS_ALLOW_HEADERS = [\n \"accept\",\n \"accept-encoding\",\n \"authorization\",\n \"content-type\",\n \"dnt\",\n \"origin\",\n \"user-agent\",\n \"x-csrftoken\",\n \"x-requested-with\",\n \"*\",\n]\nCORS_ALLOW_CREDENTIALS = True\n\nTEMPLATES = [\n {\n \"BACKEND\": \"django.template.backends.django.DjangoTemplates\",\n \"DIRS\": [os.path.join(BASE_DIR, \"templates\")],\n \"APP_DIRS\": True,\n \"OPTIONS\": {\n \"context_processors\": [\n \"django.template.context_processors.debug\",\n \"django.template.context_processors.request\",\n \"django.contrib.auth.context_processors.auth\",\n \"django.contrib.messages.context_processors.messages\",\n ],\n },\n },\n]\n\nWSGI_APPLICATION = \"main.wsgi.application\"\n\n\n# Database\n# https://docs.djangoproject.com/en/5.1/ref/settings/#databases\n\nDATABASES = {\n \"default\": {\n \"ENGINE\": \"django.db.backends.postgresql\",\n \"NAME\": os.getenv(\"DB_NAME\"),\n \"USER\": os.getenv(\"DB_USER\"),\n \"PASSWORD\": os.getenv(\"DB_PASSWORD\"),\n \"HOST\": os.getenv(\"DB_HOST\"),\n \"PORT\": os.getenv(\"DB_PORT\"),\n }\n}\n\n# Password validation\n# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n {\n \"NAME\": \"django.contrib.auth.password_validation.UserAttributeSimilarityValidator\",\n },\n {\n \"NAME\": \"django.contrib.auth.password_validation.MinimumLengthValidator\",\n },\n {\n \"NAME\": \"django.contrib.auth.password_validation.CommonPasswordValidator\",\n },\n {\n \"NAME\": \"django.contrib.auth.password_validation.NumericPasswordValidator\",\n },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/5.1/topics/i18n/\n\nLANGUAGE_CODE = \"en-us\"\n\nTIME_ZONE = \"UTC\"\n\nUSE_I18N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.1/howto/static-files/\n\nSTATIC_URL = \"/static/\"\nSTATIC_ROOT = os.path.join(BASE_DIR, \"staticfiles\")\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field\n\nDEFAULT_AUTO_FIELD = \"django.db.models.BigAutoField\"\n\n# Set APPEND_SLASH to False to prevent Django from redirecting URLs with trailing slashes\n# This fixes issues with DELETE requests\nAPPEND_SLASH = False\n\n# Для тестирования (вывод писем в консоль)\nEMAIL_BACKEND = \"django.core.mail.backends.smtp.EmailBackend\"\n\n# Или для реальной отправки (настройте под ваш SMTP)\nEMAIL_HOST = os.getenv(\"EMAIL_HOST\")\nEMAIL_PORT = os.getenv(\"EMAIL_PORT\")\nEMAIL_USE_TLS = os.getenv(\"EMAIL_USE_TLS\")\nEMAIL_HOST_USER = os.getenv(\"EMAIL_HOST_USER\")\nEMAIL_HOST_PASSWORD = os.getenv(\"EMAIL_HOST_PASSWORD\")\nDEFAULT_FROM_EMAIL = EMAIL_HOST_USER\n\nREST_FRAMEWORK = {\n \"DEFAULT_AUTHENTICATION_CLASSES\": (\n \"rest_framework.authentication.TokenAuthentication\",\n \"rest_framework_simplejwt.authentication.JWTAuthentication\",\n ),\n \"DEFAULT_PERMISSION_CLASSES\": (\"rest_framework.permissions.AllowAny\",),\n \"DEFAULT_PARSER_CLASSES\": [\n \"rest_framework.parsers.JSONParser\",\n \"rest_framework.parsers.MultiPartParser\",\n \"rest_framework.parsers.FormParser\",\n ],\n}\n\n\nSIMPLE_JWT = {\n \"ACCESS_TOKEN_LIFETIME\": timedelta(days=1),\n \"REFRESH_TOKEN_LIFETIME\": timedelta(days=2),\n \"ROTATE_REFRESH_TOKENS\": False,\n \"BLACKLIST_AFTER_ROTATION\": True,\n \"UPDATE_LAST_LOGIN\": False,\n \"ALGORITHM\": \"HS256\",\n \"SIGNING_KEY\": SECRET_KEY,\n \"VERIFYING_KEY\": \"\",\n \"AUDIENCE\": None,\n \"ISSUER\": None,\n \"JSON_ENCODER\": None,\n \"JWK_URL\": None,\n \"LEEWAY\": 0,\n \"AUTH_HEADER_TYPES\": (\"Bearer\",),\n \"AUTH_HEADER_NAME\": \"HTTP_AUTHORIZATION\",\n \"USER_ID_FIELD\": \"id\",\n \"USER_ID_CLAIM\": \"user_id\",\n \"USER_AUTHENTICATION_RULE\": \"rest_framework_simplejwt.authentication.default_user_authentication_rule\",\n \"AUTH_TOKEN_CLASSES\": (\"rest_framework_simplejwt.tokens.AccessToken\",),\n \"TOKEN_TYPE_CLAIM\": \"token_type\",\n \"TOKEN_USER_CLASS\": \"rest_framework_simplejwt.models.TokenUser\",\n \"JTI_CLAIM\": \"jti\",\n \"SLIDING_TOKEN_REFRESH_EXP_CLAIM\": \"refresh_exp\",\n \"SLIDING_TOKEN_LIFETIME\": timedelta(minutes=1),\n \"SLIDING_TOKEN_REFRESH_LIFETIME\": timedelta(days=2),\n \"TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainPairSerializer\",\n \"TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSerializer\",\n \"TOKEN_VERIFY_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenVerifySerializer\",\n \"TOKEN_BLACKLIST_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenBlacklistSerializer\",\n \"SLIDING_TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainSlidingSerializer\",\n \"SLIDING_TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSlidingSerializer\",\n}\n\n# Media files (Uploaded files)\nMEDIA_URL = \"/media/\"\nMEDIA_ROOT = os.path.join(BASE_DIR, \"media\")\n\nJUDGE0_LANGUAGE_IDS = {\n \"javascript\": {\n \"default\": 63, # Node.js\n \"node\": 63,\n },\n \"python\": {\n \"default\": 71, # CPython 3.8.1\n \"cpython\": 71,\n \"pypy\": 99, # PyPy 7.3.0\n },\n \"java\": {\n \"default\": 62, # OpenJDK 13.0.1\n \"openjdk\": 62,\n },\n \"kotlin\": {\n \"default\": 78, # Kotlin 1.3.70\n \"kotlin-jvm\": 78,\n },\n \"go\": {\n \"default\": 60, # Go 1.13.5\n \"go\": 60,\n },\n \"rust\": {\n \"default\": 73, # Rust 1.40.0\n \"rustc\": 73,\n },\n \"cpp\": {\n \"default\": 54, # GCC 9.2.0 (C++)\n \"g++\": 54,\n },\n \"csharp\": {\n \"default\": 51, # Mono C# 6.8.0\n \"mono\": 51,\n },\n \"php\": {\n \"default\": 68, # PHP 7.4.1\n \"php\": 68,\n },\n \"ruby\": {\n \"default\": 72, # Ruby 2.7.0\n \"mri\": 72,\n },\n \"swift\": {\n \"default\": 83, # Swift 5.2.3\n \"swift\": 83,\n },\n \"scala\": {\n \"default\": 81, # Scala 2.13.2\n \"scala\": 81,\n },\n}\n\nJUDGE0_API_URL = os.getenv(\"JUDGE0_API_URL\")\nJUDGE0_API_KEY = os.getenv(\"JUDGE0_API_KEY\")\nDEEPSEEK_API_KEY = \"sk-844822d9c2214b1ab1288181a903118c\"\n\n# Logging configuration\nLOGGING = {\n \"version\": 1,\n \"disable_existing_loggers\": False,\n \"formatters\": {\n \"verbose\": {\n \"format\": \"{levelname} {asctime} {module} {message}\",\n \"style\": \"{\",\n },\n },\n \"handlers\": {\n \"console\": {\n \"class\": \"logging.StreamHandler\",\n \"formatter\": \"verbose\",\n },\n },\n \"loggers\": {\n \"news\": {\n \"handlers\": [\"console\"],\n \"level\": \"INFO\",\n \"propagate\": True,\n },\n },\n}\n"}, "14f1d7333c007290af2a6eb3d58457c025691f8d": {"t": 1785768948.8093317, "n": 8834, "h": "6ff5eed3bdd25a17", "c": "from dotenv import load_dotenv\nfrom pathlib import Path\nimport os\nfrom datetime import timedelta\n\n\nload_dotenv(\".env\")\n# Build paths inside the project like this: BASE_DIR / 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\nAUTH_USER_MODEL = \"registration.User\"\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = os.getenv(\"SECRET_KEY\")\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\n\nALLOWED_HOSTS = [\"*\"]\n# Application definition\n\nINSTALLED_APPS = [\n \"django.contrib.admin\",\n \"django.contrib.auth\",\n \"django.contrib.contenttypes\",\n \"django.contrib.sessions\",\n \"django.contrib.messages\",\n \"django.contrib.staticfiles\",\n \"rest_framework\",\n \"registration\",\n \"user_profile\",\n \"courses\",\n \"corsheaders\",\n \"rest_framework_simplejwt\",\n \"drf_yasg\",\n \"news\",\n]\n\nMIDDLEWARE = [\n \"django.middleware.security.SecurityMiddleware\",\n \"django.contrib.sessions.middleware.SessionMiddleware\",\n \"django.middleware.common.CommonMiddleware\",\n \"django.middleware.csrf.CsrfViewMiddleware\",\n \"django.contrib.auth.middleware.AuthenticationMiddleware\",\n \"django.contrib.messages.middleware.MessageMiddleware\",\n \"django.middleware.clickjacking.XFrameOptionsMiddleware\",\n \"corsheaders.middleware.CorsMiddleware\",\n]\n\nROOT_URLCONF = \"main.urls\"\nFRONTEND_URL = \"http://localhost:5173\"\nPASSWORD_RESET_TIMEOUT = 24 * 60 * 60\nCORS_ALLOWED_ORIGINS = [\n \"https://admlab.site\",\n \"http://admlab.site\",\n \"https://localhost\",\n \"https://localhost:80\",\n \"https://localhost:443\",\n \"https://localhost:5173\",\n \"https://127.0.0.1\",\n \"https://127.0.0.1:8000\",\n \"https://0.0.0.0\",\n \"http://localhost\",\n \"http://localhost:80\",\n \"http://localhost:443\",\n \"http://localhost:5173\",\n \"http://127.0.0.1\",\n \"http://127.0.0.1:8000\",\n \"http://0.0.0.0\",\n]\n\n# Add CORS settings to allow all methods including DELETE\nCORS_ALLOW_METHODS = [\n \"DELETE\",\n \"GET\",\n \"OPTIONS\",\n \"PATCH\",\n \"POST\",\n \"PUT\",\n]\nCORS_ALLOW_HEADERS = [\n \"accept\",\n \"accept-encoding\",\n \"authorization\",\n \"content-type\",\n \"dnt\",\n \"origin\",\n \"user-agent\",\n \"x-csrftoken\",\n \"x-requested-with\",\n \"*\",\n]\nCORS_ALLOW_CREDENTIALS = True\n\nTEMPLATES = [\n {\n \"BACKEND\": \"django.template.backends.django.DjangoTemplates\",\n \"DIRS\": [os.path.join(BASE_DIR, \"templates\")],\n \"APP_DIRS\": True,\n \"OPTIONS\": {\n \"context_processors\": [\n \"django.template.context_processors.debug\",\n \"django.template.context_processors.request\",\n \"django.contrib.auth.context_processors.auth\",\n \"django.contrib.messages.context_processors.messages\",\n ],\n },\n },\n]\n\nWSGI_APPLICATION = \"main.wsgi.application\"\n\n\n# Database\n# https://docs.djangoproject.com/en/5.1/ref/settings/#databases\n\nDATABASES = {\n \"default\": {\n \"ENGINE\": \"django.db.backends.postgresql\",\n \"NAME\": os.getenv(\"DB_NAME\"),\n \"USER\": os.getenv(\"DB_USER\"),\n \"PASSWORD\": os.getenv(\"DB_PASSWORD\"),\n \"HOST\": os.getenv(\"DB_HOST\"),\n \"PORT\": os.getenv(\"DB_PORT\"),\n }\n}\n\n# Password validation\n# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n {\n \"NAME\": \"django.contrib.auth.password_validation.UserAttributeSimilarityValidator\",\n },\n {\n \"NAME\": \"django.contrib.auth.password_validation.MinimumLengthValidator\",\n },\n {\n \"NAME\": \"django.contrib.auth.password_validation.CommonPasswordValidator\",\n },\n {\n \"NAME\": \"django.contrib.auth.password_validation.NumericPasswordValidator\",\n },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/5.1/topics/i18n/\n\nLANGUAGE_CODE = \"en-us\"\n\nTIME_ZONE = \"UTC\"\n\nUSE_I18N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.1/howto/static-files/\n\nSTATIC_URL = \"/static/\"\nSTATIC_ROOT = os.path.join(BASE_DIR, \"staticfiles\")\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field\n\nDEFAULT_AUTO_FIELD = \"django.db.models.BigAutoField\"\n\n# Set APPEND_SLASH to False to prevent Django from redirecting URLs with trailing slashes\n# This fixes issues with DELETE requests\nAPPEND_SLASH = False\n\n# Для тестирования (вывод писем в консоль)\nEMAIL_BACKEND = \"django.core.mail.backends.smtp.EmailBackend\"\n\n# Или для реальной отправки (настройте под ваш SMTP)\nEMAIL_HOST = os.getenv(\"EMAIL_HOST\")\nEMAIL_PORT = os.getenv(\"EMAIL_PORT\")\nEMAIL_USE_TLS = os.getenv(\"EMAIL_USE_TLS\")\nEMAIL_HOST_USER = os.getenv(\"EMAIL_HOST_USER\")\nEMAIL_HOST_PASSWORD = os.getenv(\"EMAIL_HOST_PASSWORD\")\nDEFAULT_FROM_EMAIL = EMAIL_HOST_USER\n\nREST_FRAMEWORK = {\n \"DEFAULT_AUTHENTICATION_CLASSES\": (\n \"rest_framework.authentication.TokenAuthentication\",\n \"rest_framework_simplejwt.authentication.JWTAuthentication\",\n ),\n \"DEFAULT_PERMISSION_CLASSES\": (\"rest_framework.permissions.AllowAny\",),\n \"DEFAULT_PARSER_CLASSES\": [\n \"rest_framework.parsers.JSONParser\",\n \"rest_framework.parsers.MultiPartParser\",\n \"rest_framework.parsers.FormParser\",\n ],\n}\n\n\nSIMPLE_JWT = {\n \"ACCESS_TOKEN_LIFETIME\": timedelta(days=1),\n \"REFRESH_TOKEN_LIFETIME\": timedelta(days=2),\n \"ROTATE_REFRESH_TOKENS\": False,\n \"BLACKLIST_AFTER_ROTATION\": True,\n \"UPDATE_LAST_LOGIN\": False,\n \"ALGORITHM\": \"HS256\",\n \"SIGNING_KEY\": SECRET_KEY,\n \"VERIFYING_KEY\": \"\",\n \"AUDIENCE\": None,\n \"ISSUER\": None,\n \"JSON_ENCODER\": None,\n \"JWK_URL\": None,\n \"LEEWAY\": 0,\n \"AUTH_HEADER_TYPES\": (\"Bearer\",),\n \"AUTH_HEADER_NAME\": \"HTTP_AUTHORIZATION\",\n \"USER_ID_FIELD\": \"id\",\n \"USER_ID_CLAIM\": \"user_id\",\n \"USER_AUTHENTICATION_RULE\": \"rest_framework_simplejwt.authentication.default_user_authentication_rule\",\n \"AUTH_TOKEN_CLASSES\": (\"rest_framework_simplejwt.tokens.AccessToken\",),\n \"TOKEN_TYPE_CLAIM\": \"token_type\",\n \"TOKEN_USER_CLASS\": \"rest_framework_simplejwt.models.TokenUser\",\n \"JTI_CLAIM\": \"jti\",\n \"SLIDING_TOKEN_REFRESH_EXP_CLAIM\": \"refresh_exp\",\n \"SLIDING_TOKEN_LIFETIME\": timedelta(minutes=1),\n \"SLIDING_TOKEN_REFRESH_LIFETIME\": timedelta(days=2),\n \"TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainPairSerializer\",\n \"TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSerializer\",\n \"TOKEN_VERIFY_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenVerifySerializer\",\n \"TOKEN_BLACKLIST_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenBlacklistSerializer\",\n \"SLIDING_TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainSlidingSerializer\",\n \"SLIDING_TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSlidingSerializer\",\n}\n\n# Media files (Uploaded files)\nMEDIA_URL = \"/media/\"\nMEDIA_ROOT = os.path.join(BASE_DIR, \"media\")\n\nJUDGE0_LANGUAGE_IDS = {\n \"javascript\": {\n \"default\": 63, # Node.js\n \"node\": 63,\n },\n \"python\": {\n \"default\": 71, # CPython 3.8.1\n \"cpython\": 71,\n \"pypy\": 99, # PyPy 7.3.0\n },\n \"java\": {\n \"default\": 62, # OpenJDK 13.0.1\n \"openjdk\": 62,\n },\n \"kotlin\": {\n \"default\": 78, # Kotlin 1.3.70\n \"kotlin-jvm\": 78,\n },\n \"go\": {\n \"default\": 60, # Go 1.13.5\n \"go\": 60,\n },\n \"rust\": {\n \"default\": 73, # Rust 1.40.0\n \"rustc\": 73,\n },\n \"cpp\": {\n \"default\": 54, # GCC 9.2.0 (C++)\n \"g++\": 54,\n },\n \"csharp\": {\n \"default\": 51, # Mono C# 6.8.0\n \"mono\": 51,\n },\n \"php\": {\n \"default\": 68, # PHP 7.4.1\n \"php\": 68,\n },\n \"ruby\": {\n \"default\": 72, # Ruby 2.7.0\n \"mri\": 72,\n },\n \"swift\": {\n \"default\": 83, # Swift 5.2.3\n \"swift\": 83,\n },\n \"scala\": {\n \"default\": 81, # Scala 2.13.2\n \"scala\": 81,\n },\n}\n\nJUDGE0_API_URL = os.getenv(\"JUDGE0_API_URL\")\nJUDGE0_API_KEY = os.getenv(\"JUDGE0_API_KEY\")\nDEEPSEEK_API_KEY = \"sk-844822d9c2214b1ab1288181a903118c\"\n\n# Logging configuration\nLOGGING = {\n \"version\": 1,\n \"disable_existing_loggers\": False,\n \"formatters\": {\n \"verbose\": {\n \"format\": \"{levelname} {asctime} {module} {message}\",\n \"style\": \"{\",\n },\n },\n \"handlers\": {\n \"console\": {\n \"class\": \"logging.StreamHandler\",\n \"formatter\": \"verbose\",\n },\n },\n \"loggers\": {\n \"news\": {\n \"handlers\": [\"console\"],\n \"level\": \"INFO\",\n \"propagate\": True,\n },\n },\n}\n"}, "a475d7db3916bc4865d3bbef03774f390e2e3334": {"t": 1785768952.969887, "n": 8844, "h": "da2a256aaf274f6e", "c": "from dotenv import load_dotenv\nfrom pathlib import Path\nimport os\nfrom datetime import timedelta\n\n\nload_dotenv('.env')\n# Build paths inside the project like this: BASE_DIR / 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\nAUTH_USER_MODEL = \"registration.User\"\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = os.getenv('SECRET_KEY')\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\n\nALLOWED_HOSTS = [\"*\"]\n# Application definition\n\nINSTALLED_APPS = [\n 'django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n 'rest_framework',\n 'registration',\n 'user_profile',\n 'courses',\n 'corsheaders',\n 'rest_framework_simplejwt',\n 'drf_yasg',\n 'news',\n]\n\nMIDDLEWARE = [\n 'django.middleware.security.SecurityMiddleware',\n 'django.contrib.sessions.middleware.SessionMiddleware',\n 'django.middleware.common.CommonMiddleware',\n 'django.middleware.csrf.CsrfViewMiddleware',\n 'django.contrib.auth.middleware.AuthenticationMiddleware',\n 'django.contrib.messages.middleware.MessageMiddleware',\n 'django.middleware.clickjacking.XFrameOptionsMiddleware',\n 'corsheaders.middleware.CorsMiddleware',\n]\n\nROOT_URLCONF = 'main.urls'\nFRONTEND_URL = 'http://localhost:5173'\nPASSWORD_RESET_TIMEOUT = 24 * 60 *60\nCORS_ALLOWED_ORIGINS = [\n \"https://admlab.site\",\n \"http://admlab.site\",\n \"https://localhost\",\n \"https://localhost:80\",\n \"https://localhost:443\",\n \"https://localhost:5173\",\n \"https://127.0.0.1\",\n \"https://127.0.0.1:8000\",\n \"https://0.0.0.0\",\n\n \"http://localhost\",\n \"http://localhost:80\",\n \"http://localhost:443\",\n \"http://localhost:5173\",\n \"http://127.0.0.1\",\n \"http://127.0.0.1:8000\",\n \"http://0.0.0.0\",\n]\n\n# Add CORS settings to allow all methods including DELETE\nCORS_ALLOW_METHODS = [\n \"DELETE\",\n \"GET\",\n \"OPTIONS\",\n \"PATCH\",\n \"POST\",\n \"PUT\",\n]\nCORS_ALLOW_HEADERS = [\n \"accept\",\n \"accept-encoding\",\n \"authorization\",\n \"content-type\",\n \"dnt\",\n \"origin\",\n \"user-agent\",\n \"x-csrftoken\",\n \"x-requested-with\",\n \"*\",\n]\nCORS_ALLOW_CREDENTIALS = True\n\nTEMPLATES = [\n {\n 'BACKEND': 'django.template.backends.django.DjangoTemplates',\n 'DIRS': [os.path.join(BASE_DIR, 'templates')],\n 'APP_DIRS': True,\n 'OPTIONS': {\n 'context_processors': [\n 'django.template.context_processors.debug',\n 'django.template.context_processors.request',\n 'django.contrib.auth.context_processors.auth',\n 'django.contrib.messages.context_processors.messages',\n ],\n },\n },\n]\n\nWSGI_APPLICATION = 'main.wsgi.application'\n\n\n# Database\n# https://docs.djangoproject.com/en/5.1/ref/settings/#databases\n\nDATABASES = {\n 'default': {\n 'ENGINE': 'django.db.backends.postgresql',\n 'NAME': os.getenv('DB_NAME'),\n 'USER': os.getenv('DB_USER'),\n 'PASSWORD': os.getenv('DB_PASSWORD'),\n 'HOST': os.getenv('DB_HOST'),\n 'PORT': os.getenv('DB_PORT'),\n }\n}\n\n# Password validation\n# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n {\n 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',\n },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/5.1/topics/i18n/\n\nLANGUAGE_CODE = 'en-us'\n\nTIME_ZONE = 'UTC'\n\nUSE_I18N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.1/howto/static-files/\n\nSTATIC_URL = '/static/'\nSTATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field\n\nDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'\n\n# Set APPEND_SLASH to False to prevent Django from redirecting URLs with trailing slashes\n# This fixes issues with DELETE requests\nAPPEND_SLASH = False\n\n# Для тестирования (вывод писем в консоль)\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\n\n# Или для реальной отправки (настройте под ваш SMTP)\nEMAIL_HOST = os.getenv('EMAIL_HOST')\nEMAIL_PORT = os.getenv('EMAIL_PORT')\nEMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS')\nEMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')\nEMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')\nDEFAULT_FROM_EMAIL = EMAIL_HOST_USER\n\nREST_FRAMEWORK = {\n 'DEFAULT_AUTHENTICATION_CLASSES': (\n 'rest_framework.authentication.TokenAuthentication',\n 'rest_framework_simplejwt.authentication.JWTAuthentication',\n ),\n 'DEFAULT_PERMISSION_CLASSES': (\n 'rest_framework.permissions.AllowAny',\n ),\n 'DEFAULT_PARSER_CLASSES': [\n 'rest_framework.parsers.JSONParser',\n 'rest_framework.parsers.MultiPartParser',\n 'rest_framework.parsers.FormParser',\n ],\n}\n\n\nSIMPLE_JWT = {\n \"ACCESS_TOKEN_LIFETIME\": timedelta(days=1),\n \"REFRESH_TOKEN_LIFETIME\": timedelta(days=2),\n \"ROTATE_REFRESH_TOKENS\": False,\n \"BLACKLIST_AFTER_ROTATION\": True,\n \"UPDATE_LAST_LOGIN\": False,\n\n \"ALGORITHM\": \"HS256\",\n \"SIGNING_KEY\": SECRET_KEY,\n \"VERIFYING_KEY\": \"\",\n \"AUDIENCE\": None,\n \"ISSUER\": None,\n \"JSON_ENCODER\": None,\n \"JWK_URL\": None,\n \"LEEWAY\": 0,\n\n \"AUTH_HEADER_TYPES\": (\"Bearer\",),\n \"AUTH_HEADER_NAME\": \"HTTP_AUTHORIZATION\",\n \"USER_ID_FIELD\": \"id\",\n \"USER_ID_CLAIM\": \"user_id\",\n \"USER_AUTHENTICATION_RULE\": \"rest_framework_simplejwt.authentication.default_user_authentication_rule\",\n\n \"AUTH_TOKEN_CLASSES\": (\"rest_framework_simplejwt.tokens.AccessToken\",),\n \"TOKEN_TYPE_CLAIM\": \"token_type\",\n \"TOKEN_USER_CLASS\": \"rest_framework_simplejwt.models.TokenUser\",\n\n \"JTI_CLAIM\": \"jti\",\n\n \"SLIDING_TOKEN_REFRESH_EXP_CLAIM\": \"refresh_exp\",\n \"SLIDING_TOKEN_LIFETIME\": timedelta(minutes=1),\n \"SLIDING_TOKEN_REFRESH_LIFETIME\": timedelta(days=2),\n\n \"TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainPairSerializer\",\n \"TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSerializer\",\n \"TOKEN_VERIFY_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenVerifySerializer\",\n \"TOKEN_BLACKLIST_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenBlacklistSerializer\",\n \"SLIDING_TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainSlidingSerializer\",\n \"SLIDING_TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSlidingSerializer\",\n}\n\n# Media files (Uploaded files)\nMEDIA_URL = '/media/'\nMEDIA_ROOT = os.path.join(BASE_DIR, 'media')\n\nJUDGE0_LANGUAGE_IDS = {\n 'javascript': {\n 'default': 63, # Node.js\n 'node': 63\n },\n 'python': {\n 'default': 71, # CPython 3.8.1\n 'cpython': 71,\n 'pypy': 99 # PyPy 7.3.0\n },\n 'java': {\n 'default': 62, # OpenJDK 13.0.1\n 'openjdk': 62\n },\n 'kotlin': {\n 'default': 78, # Kotlin 1.3.70\n 'kotlin-jvm': 78\n },\n 'go': {\n 'default': 60, # Go 1.13.5\n 'go': 60\n },\n 'rust': {\n 'default': 73, # Rust 1.40.0\n 'rustc': 73\n },\n 'cpp': {\n 'default': 54, # GCC 9.2.0 (C++)\n 'g++': 54\n },\n 'csharp': {\n 'default': 51, # Mono C# 6.8.0\n 'mono': 51\n },\n 'php': {\n 'default': 68, # PHP 7.4.1\n 'php': 68\n },\n 'ruby': {\n 'default': 72, # Ruby 2.7.0\n 'mri': 72\n },\n 'swift': {\n 'default': 83, # Swift 5.2.3\n 'swift': 83\n },\n 'scala': {\n 'default': 81, # Scala 2.13.2\n 'scala': 81\n }\n}\n\nJUDGE0_API_URL = os.getenv('JUDGE0_API_URL')\nJUDGE0_API_KEY = os.getenv('JUDGE0_API_KEY')\nDEEPSEEK_API_KEY = \"sk-844822d9c2214b1ab1288181a903118c\"\n\n# Logging configuration\nLOGGING = {\n 'version': 1,\n 'disable_existing_loggers': False,\n 'formatters': {\n 'verbose': {\n 'format': '{levelname} {asctime} {module} {message}',\n 'style': '{',\n },\n },\n 'handlers': {\n 'console': {\n 'class': 'logging.StreamHandler',\n 'formatter': 'verbose',\n },\n },\n 'loggers': {\n 'news': {\n 'handlers': ['console'],\n 'level': 'INFO',\n 'propagate': True,\n },\n },\n}"}, "b39ad7267704a698c878de1a4c6a2568d97bbec7": {"t": 1785768959.5890982, "n": 8466, "h": "b2ba9212ed70ed4f", "c": "from dotenv import load_dotenv\nfrom pathlib import Path\nimport os\nfrom datetime import timedelta\n\n\nload_dotenv('.env')\n# Build paths inside the project like this: BASE_DIR / 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\nAUTH_USER_MODEL = \"registration.User\"\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = os.getenv('SECRET_KEY')\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\n\nALLOWED_HOSTS = [\"*\"]\n# Application definition\n\nINSTALLED_APPS = [\n 'django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n 'rest_framework',\n 'registration',\n 'user_profile',\n 'courses',\n 'corsheaders',\n 'rest_framework_simplejwt',\n 'drf_yasg',\n 'news',\n]\n\nMIDDLEWARE = [\n 'django.middleware.security.SecurityMiddleware',\n 'django.contrib.sessions.middleware.SessionMiddleware',\n 'django.middleware.common.CommonMiddleware',\n 'django.middleware.csrf.CsrfViewMiddleware',\n 'django.contrib.auth.middleware.AuthenticationMiddleware',\n 'django.contrib.messages.middleware.MessageMiddleware',\n 'django.middleware.clickjacking.XFrameOptionsMiddleware',\n 'corsheaders.middleware.CorsMiddleware',\n]\n\nROOT_URLCONF = 'main.urls'\nFRONTEND_URL = 'http://localhost:5173'\nPASSWORD_RESET_TIMEOUT = 24 * 60 *60\nCORS_ALLOWED_ORIGINS = [\n \"http://localhost:5173\",\n \"http://127.0.0.1:8000\",\n]\n\n# Add CORS settings to allow all methods including DELETE\nCORS_ALLOW_METHODS = [\n \"DELETE\",\n \"GET\",\n \"OPTIONS\",\n \"PATCH\",\n \"POST\",\n \"PUT\",\n]\nCORS_ALLOW_HEADERS = [\n \"accept\",\n \"accept-encoding\",\n \"authorization\",\n \"content-type\",\n \"dnt\",\n \"origin\",\n \"user-agent\",\n \"x-csrftoken\",\n \"x-requested-with\",\n]\nCORS_ALLOW_CREDENTIALS = True\n\nTEMPLATES = [\n {\n 'BACKEND': 'django.template.backends.django.DjangoTemplates',\n 'DIRS': [os.path.join(BASE_DIR, 'templates')],\n 'APP_DIRS': True,\n 'OPTIONS': {\n 'context_processors': [\n 'django.template.context_processors.debug',\n 'django.template.context_processors.request',\n 'django.contrib.auth.context_processors.auth',\n 'django.contrib.messages.context_processors.messages',\n ],\n },\n },\n]\n\nWSGI_APPLICATION = 'main.wsgi.application'\n\n\n# Database\n# https://docs.djangoproject.com/en/5.1/ref/settings/#databases\n\nDATABASES = {\n 'default': {\n 'ENGINE': 'django.db.backends.postgresql',\n 'NAME': os.getenv('DB_NAME'),\n 'USER': os.getenv('DB_USER'),\n 'PASSWORD': os.getenv('DB_PASSWORD'),\n 'HOST': os.getenv('DB_HOST'),\n 'PORT': os.getenv('DB_PORT'),\n }\n}\n\n# Password validation\n# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n {\n 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',\n },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/5.1/topics/i18n/\n\nLANGUAGE_CODE = 'en-us'\n\nTIME_ZONE = 'UTC'\n\nUSE_I18N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.1/howto/static-files/\n\nSTATIC_URL = '/static/'\nSTATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field\n\nDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'\n\n# Set APPEND_SLASH to False to prevent Django from redirecting URLs with trailing slashes\n# This fixes issues with DELETE requests\nAPPEND_SLASH = False\n\n# Для тестирования (вывод писем в консоль)\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\n\n# Или для реальной отправки (настройте под ваш SMTP)\nEMAIL_HOST = os.getenv('EMAIL_HOST')\nEMAIL_PORT = os.getenv('EMAIL_PORT')\nEMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS')\nEMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')\nEMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')\nDEFAULT_FROM_EMAIL = EMAIL_HOST_USER\n\nREST_FRAMEWORK = {\n 'DEFAULT_AUTHENTICATION_CLASSES': (\n 'rest_framework.authentication.TokenAuthentication',\n 'rest_framework_simplejwt.authentication.JWTAuthentication',\n ),\n 'DEFAULT_PERMISSION_CLASSES': (\n 'rest_framework.permissions.AllowAny',\n ),\n 'DEFAULT_PARSER_CLASSES': [\n 'rest_framework.parsers.JSONParser',\n 'rest_framework.parsers.MultiPartParser',\n 'rest_framework.parsers.FormParser',\n ],\n}\n\n\nSIMPLE_JWT = {\n \"ACCESS_TOKEN_LIFETIME\": timedelta(days=1),\n \"REFRESH_TOKEN_LIFETIME\": timedelta(days=2),\n \"ROTATE_REFRESH_TOKENS\": False,\n \"BLACKLIST_AFTER_ROTATION\": True,\n \"UPDATE_LAST_LOGIN\": False,\n\n \"ALGORITHM\": \"HS256\",\n \"SIGNING_KEY\": SECRET_KEY,\n \"VERIFYING_KEY\": \"\",\n \"AUDIENCE\": None,\n \"ISSUER\": None,\n \"JSON_ENCODER\": None,\n \"JWK_URL\": None,\n \"LEEWAY\": 0,\n\n \"AUTH_HEADER_TYPES\": (\"Bearer\",),\n \"AUTH_HEADER_NAME\": \"HTTP_AUTHORIZATION\",\n \"USER_ID_FIELD\": \"id\",\n \"USER_ID_CLAIM\": \"user_id\",\n \"USER_AUTHENTICATION_RULE\": \"rest_framework_simplejwt.authentication.default_user_authentication_rule\",\n\n \"AUTH_TOKEN_CLASSES\": (\"rest_framework_simplejwt.tokens.AccessToken\",),\n \"TOKEN_TYPE_CLAIM\": \"token_type\",\n \"TOKEN_USER_CLASS\": \"rest_framework_simplejwt.models.TokenUser\",\n\n \"JTI_CLAIM\": \"jti\",\n\n \"SLIDING_TOKEN_REFRESH_EXP_CLAIM\": \"refresh_exp\",\n \"SLIDING_TOKEN_LIFETIME\": timedelta(minutes=1),\n \"SLIDING_TOKEN_REFRESH_LIFETIME\": timedelta(days=2),\n\n \"TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainPairSerializer\",\n \"TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSerializer\",\n \"TOKEN_VERIFY_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenVerifySerializer\",\n \"TOKEN_BLACKLIST_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenBlacklistSerializer\",\n \"SLIDING_TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainSlidingSerializer\",\n \"SLIDING_TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSlidingSerializer\",\n}\n\n# Media files (Uploaded files)\nMEDIA_URL = '/media/'\nMEDIA_ROOT = os.path.join(BASE_DIR, 'media')\n\nJUDGE0_LANGUAGE_IDS = {\n 'javascript': {\n 'default': 63, # Node.js\n 'node': 63\n },\n 'python': {\n 'default': 71, # CPython 3.8.1\n 'cpython': 71,\n 'pypy': 99 # PyPy 7.3.0\n },\n 'java': {\n 'default': 62, # OpenJDK 13.0.1\n 'openjdk': 62\n },\n 'kotlin': {\n 'default': 78, # Kotlin 1.3.70\n 'kotlin-jvm': 78\n },\n 'go': {\n 'default': 60, # Go 1.13.5\n 'go': 60\n },\n 'rust': {\n 'default': 73, # Rust 1.40.0\n 'rustc': 73\n },\n 'cpp': {\n 'default': 54, # GCC 9.2.0 (C++)\n 'g++': 54\n },\n 'csharp': {\n 'default': 51, # Mono C# 6.8.0\n 'mono': 51\n },\n 'php': {\n 'default': 68, # PHP 7.4.1\n 'php': 68\n },\n 'ruby': {\n 'default': 72, # Ruby 2.7.0\n 'mri': 72\n },\n 'swift': {\n 'default': 83, # Swift 5.2.3\n 'swift': 83\n },\n 'scala': {\n 'default': 81, # Scala 2.13.2\n 'scala': 81\n }\n}\n\nJUDGE0_API_URL = os.getenv('JUDGE0_API_URL')\nJUDGE0_API_KEY = os.getenv('JUDGE0_API_KEY')\nDEEPSEEK_API_KEY = \"sk-844822d9c2214b1ab1288181a903118c\"\n\n# Logging configuration\nLOGGING = {\n 'version': 1,\n 'disable_existing_loggers': False,\n 'formatters': {\n 'verbose': {\n 'format': '{levelname} {asctime} {module} {message}',\n 'style': '{',\n },\n },\n 'handlers': {\n 'console': {\n 'class': 'logging.StreamHandler',\n 'formatter': 'verbose',\n },\n },\n 'loggers': {\n 'news': {\n 'handlers': ['console'],\n 'level': 'INFO',\n 'propagate': True,\n },\n },\n}"}, "150d28096e2b263c5ba6f6da32f089b5bf2b4f84": {"t": 1785768964.0700464, "n": 8498, "h": "a36442cae795e753", "c": "from dotenv import load_dotenv\nfrom pathlib import Path\nimport os\nfrom datetime import timedelta\n\n\nload_dotenv('.env')\n# Build paths inside the project like this: BASE_DIR / 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\nAUTH_USER_MODEL = \"registration.User\"\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = os.getenv('SECRET_KEY')\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\n\nALLOWED_HOSTS = [\"*\"]\n# Application definition\n\nINSTALLED_APPS = [\n 'django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n 'rest_framework',\n 'registration',\n 'user_profile',\n 'courses',\n 'corsheaders',\n 'rest_framework_simplejwt',\n 'drf_yasg',\n 'news',\n 'progress',\n 'comments',\n]\n\nMIDDLEWARE = [\n 'django.middleware.security.SecurityMiddleware',\n 'django.contrib.sessions.middleware.SessionMiddleware',\n 'django.middleware.common.CommonMiddleware',\n 'django.middleware.csrf.CsrfViewMiddleware',\n 'django.contrib.auth.middleware.AuthenticationMiddleware',\n 'django.contrib.messages.middleware.MessageMiddleware',\n 'django.middleware.clickjacking.XFrameOptionsMiddleware',\n 'corsheaders.middleware.CorsMiddleware',\n]\n\nROOT_URLCONF = 'main.urls'\nFRONTEND_URL = 'http://localhost:5173'\nPASSWORD_RESET_TIMEOUT = 24 * 60 *60\nCORS_ALLOWED_ORIGINS = [\n \"http://localhost:5173\",\n \"http://127.0.0.1:8000\",\n]\n\n# Add CORS settings to allow all methods including DELETE\nCORS_ALLOW_METHODS = [\n \"DELETE\",\n \"GET\",\n \"OPTIONS\",\n \"PATCH\",\n \"POST\",\n \"PUT\",\n]\nCORS_ALLOW_HEADERS = [\n \"accept\",\n \"accept-encoding\",\n \"authorization\",\n \"content-type\",\n \"dnt\",\n \"origin\",\n \"user-agent\",\n \"x-csrftoken\",\n \"x-requested-with\",\n]\nCORS_ALLOW_CREDENTIALS = True\n\nTEMPLATES = [\n {\n 'BACKEND': 'django.template.backends.django.DjangoTemplates',\n 'DIRS': [os.path.join(BASE_DIR, 'templates')],\n 'APP_DIRS': True,\n 'OPTIONS': {\n 'context_processors': [\n 'django.template.context_processors.debug',\n 'django.template.context_processors.request',\n 'django.contrib.auth.context_processors.auth',\n 'django.contrib.messages.context_processors.messages',\n ],\n },\n },\n]\n\nWSGI_APPLICATION = 'main.wsgi.application'\n\n\n# Database\n# https://docs.djangoproject.com/en/5.1/ref/settings/#databases\n\nDATABASES = {\n 'default': {\n 'ENGINE': 'django.db.backends.postgresql',\n 'NAME': os.getenv('DB_NAME'),\n 'USER': os.getenv('DB_USER'),\n 'PASSWORD': os.getenv('DB_PASSWORD'),\n 'HOST': os.getenv('DB_HOST'),\n 'PORT': os.getenv('DB_PORT'),\n }\n}\n\n# Password validation\n# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n {\n 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',\n },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/5.1/topics/i18n/\n\nLANGUAGE_CODE = 'en-us'\n\nTIME_ZONE = 'UTC'\n\nUSE_I18N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.1/howto/static-files/\n\nSTATIC_URL = '/static/'\nSTATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field\n\nDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'\n\n# Set APPEND_SLASH to False to prevent Django from redirecting URLs with trailing slashes\n# This fixes issues with DELETE requests\nAPPEND_SLASH = False\n\n# Для тестирования (вывод писем в консоль)\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\n\n# Или для реальной отправки (настройте под ваш SMTP)\nEMAIL_HOST = os.getenv('EMAIL_HOST')\nEMAIL_PORT = os.getenv('EMAIL_PORT')\nEMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS')\nEMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')\nEMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')\nDEFAULT_FROM_EMAIL = EMAIL_HOST_USER\n\nREST_FRAMEWORK = {\n 'DEFAULT_AUTHENTICATION_CLASSES': (\n 'rest_framework.authentication.TokenAuthentication',\n 'rest_framework_simplejwt.authentication.JWTAuthentication',\n ),\n 'DEFAULT_PERMISSION_CLASSES': (\n 'rest_framework.permissions.AllowAny',\n ),\n 'DEFAULT_PARSER_CLASSES': [\n 'rest_framework.parsers.JSONParser',\n 'rest_framework.parsers.MultiPartParser',\n 'rest_framework.parsers.FormParser',\n ],\n}\n\n\nSIMPLE_JWT = {\n \"ACCESS_TOKEN_LIFETIME\": timedelta(days=1),\n \"REFRESH_TOKEN_LIFETIME\": timedelta(days=2),\n \"ROTATE_REFRESH_TOKENS\": False,\n \"BLACKLIST_AFTER_ROTATION\": True,\n \"UPDATE_LAST_LOGIN\": False,\n\n \"ALGORITHM\": \"HS256\",\n \"SIGNING_KEY\": SECRET_KEY,\n \"VERIFYING_KEY\": \"\",\n \"AUDIENCE\": None,\n \"ISSUER\": None,\n \"JSON_ENCODER\": None,\n \"JWK_URL\": None,\n \"LEEWAY\": 0,\n\n \"AUTH_HEADER_TYPES\": (\"Bearer\",),\n \"AUTH_HEADER_NAME\": \"HTTP_AUTHORIZATION\",\n \"USER_ID_FIELD\": \"id\",\n \"USER_ID_CLAIM\": \"user_id\",\n \"USER_AUTHENTICATION_RULE\": \"rest_framework_simplejwt.authentication.default_user_authentication_rule\",\n\n \"AUTH_TOKEN_CLASSES\": (\"rest_framework_simplejwt.tokens.AccessToken\",),\n \"TOKEN_TYPE_CLAIM\": \"token_type\",\n \"TOKEN_USER_CLASS\": \"rest_framework_simplejwt.models.TokenUser\",\n\n \"JTI_CLAIM\": \"jti\",\n\n \"SLIDING_TOKEN_REFRESH_EXP_CLAIM\": \"refresh_exp\",\n \"SLIDING_TOKEN_LIFETIME\": timedelta(minutes=1),\n \"SLIDING_TOKEN_REFRESH_LIFETIME\": timedelta(days=2),\n\n \"TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainPairSerializer\",\n \"TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSerializer\",\n \"TOKEN_VERIFY_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenVerifySerializer\",\n \"TOKEN_BLACKLIST_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenBlacklistSerializer\",\n \"SLIDING_TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainSlidingSerializer\",\n \"SLIDING_TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSlidingSerializer\",\n}\n\n# Media files (Uploaded files)\nMEDIA_URL = '/media/'\nMEDIA_ROOT = os.path.join(BASE_DIR, 'media')\n\nJUDGE0_LANGUAGE_IDS = {\n 'javascript': {\n 'default': 63, # Node.js\n 'node': 63\n },\n 'python': {\n 'default': 71, # CPython 3.8.1\n 'cpython': 71,\n 'pypy': 99 # PyPy 7.3.0\n },\n 'java': {\n 'default': 62, # OpenJDK 13.0.1\n 'openjdk': 62\n },\n 'kotlin': {\n 'default': 78, # Kotlin 1.3.70\n 'kotlin-jvm': 78\n },\n 'go': {\n 'default': 60, # Go 1.13.5\n 'go': 60\n },\n 'rust': {\n 'default': 73, # Rust 1.40.0\n 'rustc': 73\n },\n 'cpp': {\n 'default': 54, # GCC 9.2.0 (C++)\n 'g++': 54\n },\n 'csharp': {\n 'default': 51, # Mono C# 6.8.0\n 'mono': 51\n },\n 'php': {\n 'default': 68, # PHP 7.4.1\n 'php': 68\n },\n 'ruby': {\n 'default': 72, # Ruby 2.7.0\n 'mri': 72\n },\n 'swift': {\n 'default': 83, # Swift 5.2.3\n 'swift': 83\n },\n 'scala': {\n 'default': 81, # Scala 2.13.2\n 'scala': 81\n }\n}\n\nJUDGE0_API_URL = os.getenv('JUDGE0_API_URL')\nJUDGE0_API_KEY = os.getenv('JUDGE0_API_KEY')\nDEEPSEEK_API_KEY = \"sk-844822d9c2214b1ab1288181a903118c\"\n\n# Logging configuration\nLOGGING = {\n 'version': 1,\n 'disable_existing_loggers': False,\n 'formatters': {\n 'verbose': {\n 'format': '{levelname} {asctime} {module} {message}',\n 'style': '{',\n },\n },\n 'handlers': {\n 'console': {\n 'class': 'logging.StreamHandler',\n 'formatter': 'verbose',\n },\n },\n 'loggers': {\n 'news': {\n 'handlers': ['console'],\n 'level': 'INFO',\n 'propagate': True,\n },\n },\n}"}, "036570ea912b3fc4ba2880fb540ca7222ac1c732": {"t": 1785768966.5307858, "n": 8466, "h": "b2ba9212ed70ed4f", "c": "from dotenv import load_dotenv\nfrom pathlib import Path\nimport os\nfrom datetime import timedelta\n\n\nload_dotenv('.env')\n# Build paths inside the project like this: BASE_DIR / 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\nAUTH_USER_MODEL = \"registration.User\"\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = os.getenv('SECRET_KEY')\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\n\nALLOWED_HOSTS = [\"*\"]\n# Application definition\n\nINSTALLED_APPS = [\n 'django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n 'rest_framework',\n 'registration',\n 'user_profile',\n 'courses',\n 'corsheaders',\n 'rest_framework_simplejwt',\n 'drf_yasg',\n 'news',\n]\n\nMIDDLEWARE = [\n 'django.middleware.security.SecurityMiddleware',\n 'django.contrib.sessions.middleware.SessionMiddleware',\n 'django.middleware.common.CommonMiddleware',\n 'django.middleware.csrf.CsrfViewMiddleware',\n 'django.contrib.auth.middleware.AuthenticationMiddleware',\n 'django.contrib.messages.middleware.MessageMiddleware',\n 'django.middleware.clickjacking.XFrameOptionsMiddleware',\n 'corsheaders.middleware.CorsMiddleware',\n]\n\nROOT_URLCONF = 'main.urls'\nFRONTEND_URL = 'http://localhost:5173'\nPASSWORD_RESET_TIMEOUT = 24 * 60 *60\nCORS_ALLOWED_ORIGINS = [\n \"http://localhost:5173\",\n \"http://127.0.0.1:8000\",\n]\n\n# Add CORS settings to allow all methods including DELETE\nCORS_ALLOW_METHODS = [\n \"DELETE\",\n \"GET\",\n \"OPTIONS\",\n \"PATCH\",\n \"POST\",\n \"PUT\",\n]\nCORS_ALLOW_HEADERS = [\n \"accept\",\n \"accept-encoding\",\n \"authorization\",\n \"content-type\",\n \"dnt\",\n \"origin\",\n \"user-agent\",\n \"x-csrftoken\",\n \"x-requested-with\",\n]\nCORS_ALLOW_CREDENTIALS = True\n\nTEMPLATES = [\n {\n 'BACKEND': 'django.template.backends.django.DjangoTemplates',\n 'DIRS': [os.path.join(BASE_DIR, 'templates')],\n 'APP_DIRS': True,\n 'OPTIONS': {\n 'context_processors': [\n 'django.template.context_processors.debug',\n 'django.template.context_processors.request',\n 'django.contrib.auth.context_processors.auth',\n 'django.contrib.messages.context_processors.messages',\n ],\n },\n },\n]\n\nWSGI_APPLICATION = 'main.wsgi.application'\n\n\n# Database\n# https://docs.djangoproject.com/en/5.1/ref/settings/#databases\n\nDATABASES = {\n 'default': {\n 'ENGINE': 'django.db.backends.postgresql',\n 'NAME': os.getenv('DB_NAME'),\n 'USER': os.getenv('DB_USER'),\n 'PASSWORD': os.getenv('DB_PASSWORD'),\n 'HOST': os.getenv('DB_HOST'),\n 'PORT': os.getenv('DB_PORT'),\n }\n}\n\n# Password validation\n# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n {\n 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',\n },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/5.1/topics/i18n/\n\nLANGUAGE_CODE = 'en-us'\n\nTIME_ZONE = 'UTC'\n\nUSE_I18N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.1/howto/static-files/\n\nSTATIC_URL = '/static/'\nSTATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field\n\nDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'\n\n# Set APPEND_SLASH to False to prevent Django from redirecting URLs with trailing slashes\n# This fixes issues with DELETE requests\nAPPEND_SLASH = False\n\n# Для тестирования (вывод писем в консоль)\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\n\n# Или для реальной отправки (настройте под ваш SMTP)\nEMAIL_HOST = os.getenv('EMAIL_HOST')\nEMAIL_PORT = os.getenv('EMAIL_PORT')\nEMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS')\nEMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')\nEMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')\nDEFAULT_FROM_EMAIL = EMAIL_HOST_USER\n\nREST_FRAMEWORK = {\n 'DEFAULT_AUTHENTICATION_CLASSES': (\n 'rest_framework.authentication.TokenAuthentication',\n 'rest_framework_simplejwt.authentication.JWTAuthentication',\n ),\n 'DEFAULT_PERMISSION_CLASSES': (\n 'rest_framework.permissions.AllowAny',\n ),\n 'DEFAULT_PARSER_CLASSES': [\n 'rest_framework.parsers.JSONParser',\n 'rest_framework.parsers.MultiPartParser',\n 'rest_framework.parsers.FormParser',\n ],\n}\n\n\nSIMPLE_JWT = {\n \"ACCESS_TOKEN_LIFETIME\": timedelta(days=1),\n \"REFRESH_TOKEN_LIFETIME\": timedelta(days=2),\n \"ROTATE_REFRESH_TOKENS\": False,\n \"BLACKLIST_AFTER_ROTATION\": True,\n \"UPDATE_LAST_LOGIN\": False,\n\n \"ALGORITHM\": \"HS256\",\n \"SIGNING_KEY\": SECRET_KEY,\n \"VERIFYING_KEY\": \"\",\n \"AUDIENCE\": None,\n \"ISSUER\": None,\n \"JSON_ENCODER\": None,\n \"JWK_URL\": None,\n \"LEEWAY\": 0,\n\n \"AUTH_HEADER_TYPES\": (\"Bearer\",),\n \"AUTH_HEADER_NAME\": \"HTTP_AUTHORIZATION\",\n \"USER_ID_FIELD\": \"id\",\n \"USER_ID_CLAIM\": \"user_id\",\n \"USER_AUTHENTICATION_RULE\": \"rest_framework_simplejwt.authentication.default_user_authentication_rule\",\n\n \"AUTH_TOKEN_CLASSES\": (\"rest_framework_simplejwt.tokens.AccessToken\",),\n \"TOKEN_TYPE_CLAIM\": \"token_type\",\n \"TOKEN_USER_CLASS\": \"rest_framework_simplejwt.models.TokenUser\",\n\n \"JTI_CLAIM\": \"jti\",\n\n \"SLIDING_TOKEN_REFRESH_EXP_CLAIM\": \"refresh_exp\",\n \"SLIDING_TOKEN_LIFETIME\": timedelta(minutes=1),\n \"SLIDING_TOKEN_REFRESH_LIFETIME\": timedelta(days=2),\n\n \"TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainPairSerializer\",\n \"TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSerializer\",\n \"TOKEN_VERIFY_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenVerifySerializer\",\n \"TOKEN_BLACKLIST_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenBlacklistSerializer\",\n \"SLIDING_TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainSlidingSerializer\",\n \"SLIDING_TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSlidingSerializer\",\n}\n\n# Media files (Uploaded files)\nMEDIA_URL = '/media/'\nMEDIA_ROOT = os.path.join(BASE_DIR, 'media')\n\nJUDGE0_LANGUAGE_IDS = {\n 'javascript': {\n 'default': 63, # Node.js\n 'node': 63\n },\n 'python': {\n 'default': 71, # CPython 3.8.1\n 'cpython': 71,\n 'pypy': 99 # PyPy 7.3.0\n },\n 'java': {\n 'default': 62, # OpenJDK 13.0.1\n 'openjdk': 62\n },\n 'kotlin': {\n 'default': 78, # Kotlin 1.3.70\n 'kotlin-jvm': 78\n },\n 'go': {\n 'default': 60, # Go 1.13.5\n 'go': 60\n },\n 'rust': {\n 'default': 73, # Rust 1.40.0\n 'rustc': 73\n },\n 'cpp': {\n 'default': 54, # GCC 9.2.0 (C++)\n 'g++': 54\n },\n 'csharp': {\n 'default': 51, # Mono C# 6.8.0\n 'mono': 51\n },\n 'php': {\n 'default': 68, # PHP 7.4.1\n 'php': 68\n },\n 'ruby': {\n 'default': 72, # Ruby 2.7.0\n 'mri': 72\n },\n 'swift': {\n 'default': 83, # Swift 5.2.3\n 'swift': 83\n },\n 'scala': {\n 'default': 81, # Scala 2.13.2\n 'scala': 81\n }\n}\n\nJUDGE0_API_URL = os.getenv('JUDGE0_API_URL')\nJUDGE0_API_KEY = os.getenv('JUDGE0_API_KEY')\nDEEPSEEK_API_KEY = \"sk-844822d9c2214b1ab1288181a903118c\"\n\n# Logging configuration\nLOGGING = {\n 'version': 1,\n 'disable_existing_loggers': False,\n 'formatters': {\n 'verbose': {\n 'format': '{levelname} {asctime} {module} {message}',\n 'style': '{',\n },\n },\n 'handlers': {\n 'console': {\n 'class': 'logging.StreamHandler',\n 'formatter': 'verbose',\n },\n },\n 'loggers': {\n 'news': {\n 'handlers': ['console'],\n 'level': 'INFO',\n 'propagate': True,\n },\n },\n}"}, "3a90ac00ffe66d6ad2247a8be7e094d4601200b3": {"t": 1785768970.228874, "n": 7899, "h": "f4c308e6dccee781", "c": "from dotenv import load_dotenv\nfrom pathlib import Path\nimport os\nfrom datetime import timedelta\n\n\nload_dotenv('.env')\n# Build paths inside the project like this: BASE_DIR / 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\nAUTH_USER_MODEL = \"registration.User\"\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = os.getenv('SECRET_KEY')\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\n\nALLOWED_HOSTS = [\"*\"]\n# Application definition\n\nINSTALLED_APPS = [\n 'django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n 'rest_framework',\n 'registration',\n 'user_profile',\n 'courses',\n 'corsheaders',\n 'rest_framework_simplejwt',\n 'drf_yasg',\n 'news',\n]\n\nMIDDLEWARE = [\n 'django.middleware.security.SecurityMiddleware',\n 'django.contrib.sessions.middleware.SessionMiddleware',\n 'django.middleware.common.CommonMiddleware',\n 'django.middleware.csrf.CsrfViewMiddleware',\n 'django.contrib.auth.middleware.AuthenticationMiddleware',\n 'django.contrib.messages.middleware.MessageMiddleware',\n 'django.middleware.clickjacking.XFrameOptionsMiddleware',\n 'corsheaders.middleware.CorsMiddleware',\n]\n\nROOT_URLCONF = 'main.urls'\nFRONTEND_URL = 'http://localhost:5173'\nPASSWORD_RESET_TIMEOUT = 24 * 60 *60\nCORS_ALLOWED_ORIGINS = [\n \"http://localhost:5173\",\n \"http://127.0.0.1:8000\",\n]\n\n# Add CORS settings to allow all methods including DELETE\nCORS_ALLOW_METHODS = [\n \"DELETE\",\n \"GET\",\n \"OPTIONS\",\n \"PATCH\",\n \"POST\",\n \"PUT\",\n]\nCORS_ALLOW_HEADERS = [\n \"accept\",\n \"accept-encoding\",\n \"authorization\",\n \"content-type\",\n \"dnt\",\n \"origin\",\n \"user-agent\",\n \"x-csrftoken\",\n \"x-requested-with\",\n]\nCORS_ALLOW_CREDENTIALS = True\n\nTEMPLATES = [\n {\n 'BACKEND': 'django.template.backends.django.DjangoTemplates',\n 'DIRS': [os.path.join(BASE_DIR, 'templates')],\n 'APP_DIRS': True,\n 'OPTIONS': {\n 'context_processors': [\n 'django.template.context_processors.debug',\n 'django.template.context_processors.request',\n 'django.contrib.auth.context_processors.auth',\n 'django.contrib.messages.context_processors.messages',\n ],\n },\n },\n]\n\nWSGI_APPLICATION = 'main.wsgi.application'\n\n\n# Database\n# https://docs.djangoproject.com/en/5.1/ref/settings/#databases\n\nDATABASES = {\n 'default': {\n 'ENGINE': 'django.db.backends.postgresql',\n 'NAME': os.getenv('DB_NAME'),\n 'USER': os.getenv('DB_USER'),\n 'PASSWORD': os.getenv('DB_PASSWORD'),\n 'HOST': os.getenv('DB_HOST'),\n 'PORT': os.getenv('DB_PORT'),\n }\n}\n\n# Password validation\n# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n {\n 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',\n },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/5.1/topics/i18n/\n\nLANGUAGE_CODE = 'en-us'\n\nTIME_ZONE = 'UTC'\n\nUSE_I18N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.1/howto/static-files/\n\nSTATIC_URL = '/static/'\nSTATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field\n\nDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'\n\n# Set APPEND_SLASH to False to prevent Django from redirecting URLs with trailing slashes\n# This fixes issues with DELETE requests\nAPPEND_SLASH = False\n\n# Для тестирования (вывод писем в консоль)\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\n\n# Или для реальной отправки (настройте под ваш SMTP)\nEMAIL_HOST = os.getenv('EMAIL_HOST')\nEMAIL_PORT = os.getenv('EMAIL_PORT')\nEMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS')\nEMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')\nEMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')\nDEFAULT_FROM_EMAIL = EMAIL_HOST_USER\n\nREST_FRAMEWORK = {\n 'DEFAULT_AUTHENTICATION_CLASSES': (\n 'rest_framework.authentication.TokenAuthentication',\n 'rest_framework_simplejwt.authentication.JWTAuthentication',\n ),\n 'DEFAULT_PERMISSION_CLASSES': (\n 'rest_framework.permissions.AllowAny',\n ),\n 'DEFAULT_PARSER_CLASSES': [\n 'rest_framework.parsers.JSONParser',\n 'rest_framework.parsers.MultiPartParser',\n 'rest_framework.parsers.FormParser',\n ],\n}\n\n\nSIMPLE_JWT = {\n \"ACCESS_TOKEN_LIFETIME\": timedelta(days=1),\n \"REFRESH_TOKEN_LIFETIME\": timedelta(days=2),\n \"ROTATE_REFRESH_TOKENS\": False,\n \"BLACKLIST_AFTER_ROTATION\": True,\n \"UPDATE_LAST_LOGIN\": False,\n\n \"ALGORITHM\": \"HS256\",\n \"SIGNING_KEY\": SECRET_KEY,\n \"VERIFYING_KEY\": \"\",\n \"AUDIENCE\": None,\n \"ISSUER\": None,\n \"JSON_ENCODER\": None,\n \"JWK_URL\": None,\n \"LEEWAY\": 0,\n\n \"AUTH_HEADER_TYPES\": (\"Bearer\",),\n \"AUTH_HEADER_NAME\": \"HTTP_AUTHORIZATION\",\n \"USER_ID_FIELD\": \"id\",\n \"USER_ID_CLAIM\": \"user_id\",\n \"USER_AUTHENTICATION_RULE\": \"rest_framework_simplejwt.authentication.default_user_authentication_rule\",\n\n \"AUTH_TOKEN_CLASSES\": (\"rest_framework_simplejwt.tokens.AccessToken\",),\n \"TOKEN_TYPE_CLAIM\": \"token_type\",\n \"TOKEN_USER_CLASS\": \"rest_framework_simplejwt.models.TokenUser\",\n\n \"JTI_CLAIM\": \"jti\",\n\n \"SLIDING_TOKEN_REFRESH_EXP_CLAIM\": \"refresh_exp\",\n \"SLIDING_TOKEN_LIFETIME\": timedelta(minutes=1),\n \"SLIDING_TOKEN_REFRESH_LIFETIME\": timedelta(days=2),\n\n \"TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainPairSerializer\",\n \"TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSerializer\",\n \"TOKEN_VERIFY_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenVerifySerializer\",\n \"TOKEN_BLACKLIST_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenBlacklistSerializer\",\n \"SLIDING_TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainSlidingSerializer\",\n \"SLIDING_TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSlidingSerializer\",\n}\n\nMEDIA_URL = '/media/'\nMEDIA_ROOT = os.path.join(BASE_DIR, 'media')\n\nJUDGE0_LANGUAGE_IDS = {\n 'javascript': {\n 'default': 63, # Node.js\n 'node': 63\n },\n 'python': {\n 'default': 71, # CPython 3.8.1\n 'cpython': 71,\n 'pypy': 99 # PyPy 7.3.0\n },\n 'java': {\n 'default': 62, # OpenJDK 13.0.1\n 'openjdk': 62\n },\n 'kotlin': {\n 'default': 78, # Kotlin 1.3.70\n 'kotlin-jvm': 78\n },\n 'go': {\n 'default': 60, # Go 1.13.5\n 'go': 60\n },\n 'rust': {\n 'default': 73, # Rust 1.40.0\n 'rustc': 73\n },\n 'cpp': {\n 'default': 54, # GCC 9.2.0 (C++)\n 'g++': 54\n },\n 'csharp': {\n 'default': 51, # Mono C# 6.8.0\n 'mono': 51\n },\n 'php': {\n 'default': 68, # PHP 7.4.1\n 'php': 68\n },\n 'ruby': {\n 'default': 72, # Ruby 2.7.0\n 'mri': 72\n },\n 'swift': {\n 'default': 83, # Swift 5.2.3\n 'swift': 83\n },\n 'scala': {\n 'default': 81, # Scala 2.13.2\n 'scala': 81\n }\n}\n\nJUDGE0_API_URL = os.getenv('JUDGE0_API_URL')\nJUDGE0_API_KEY = os.getenv('JUDGE0_API_KEY')\nDEEPSEEK_API_KEY = \"sk-844822d9c2214b1ab1288181a903118c\""}, "cd21ab6e2e1215ebfb6fefad20496a911584532b": {"t": 1785768972.537329, "n": 7887, "h": "4375ff207c4d5991", "c": "from dotenv import load_dotenv\nfrom pathlib import Path\nimport os\nfrom datetime import timedelta\n\n\nload_dotenv('.env')\n# Build paths inside the project like this: BASE_DIR / 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\nAUTH_USER_MODEL = \"registration.User\"\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = os.getenv('SECRET_KEY')\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\n\nALLOWED_HOSTS = [\"*\"]\n# Application definition\n\nINSTALLED_APPS = [\n 'django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n 'rest_framework',\n 'registration',\n 'user_profile',\n 'courses',\n 'corsheaders',\n 'rest_framework_simplejwt',\n 'drf_yasg',\n]\n\nMIDDLEWARE = [\n 'django.middleware.security.SecurityMiddleware',\n 'django.contrib.sessions.middleware.SessionMiddleware',\n 'django.middleware.common.CommonMiddleware',\n 'django.middleware.csrf.CsrfViewMiddleware',\n 'django.contrib.auth.middleware.AuthenticationMiddleware',\n 'django.contrib.messages.middleware.MessageMiddleware',\n 'django.middleware.clickjacking.XFrameOptionsMiddleware',\n 'corsheaders.middleware.CorsMiddleware',\n]\n\nROOT_URLCONF = 'main.urls'\nFRONTEND_URL = 'http://localhost:5173'\nPASSWORD_RESET_TIMEOUT = 24 * 60 *60\nCORS_ALLOWED_ORIGINS = [\n \"http://localhost:5173\",\n \"http://127.0.0.1:8000\",\n]\n\n# Add CORS settings to allow all methods including DELETE\nCORS_ALLOW_METHODS = [\n \"DELETE\",\n \"GET\",\n \"OPTIONS\",\n \"PATCH\",\n \"POST\",\n \"PUT\",\n]\nCORS_ALLOW_HEADERS = [\n \"accept\",\n \"accept-encoding\",\n \"authorization\",\n \"content-type\",\n \"dnt\",\n \"origin\",\n \"user-agent\",\n \"x-csrftoken\",\n \"x-requested-with\",\n]\nCORS_ALLOW_CREDENTIALS = True\n\nTEMPLATES = [\n {\n 'BACKEND': 'django.template.backends.django.DjangoTemplates',\n 'DIRS': [os.path.join(BASE_DIR, 'templates')],\n 'APP_DIRS': True,\n 'OPTIONS': {\n 'context_processors': [\n 'django.template.context_processors.debug',\n 'django.template.context_processors.request',\n 'django.contrib.auth.context_processors.auth',\n 'django.contrib.messages.context_processors.messages',\n ],\n },\n },\n]\n\nWSGI_APPLICATION = 'main.wsgi.application'\n\n\n# Database\n# https://docs.djangoproject.com/en/5.1/ref/settings/#databases\n\nDATABASES = {\n 'default': {\n 'ENGINE': 'django.db.backends.postgresql',\n 'NAME': os.getenv('DB_NAME'),\n 'USER': os.getenv('DB_USER'),\n 'PASSWORD': os.getenv('DB_PASSWORD'),\n 'HOST': os.getenv('DB_HOST'),\n 'PORT': os.getenv('DB_PORT'),\n }\n}\n\n# Password validation\n# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n {\n 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',\n },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/5.1/topics/i18n/\n\nLANGUAGE_CODE = 'en-us'\n\nTIME_ZONE = 'UTC'\n\nUSE_I18N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.1/howto/static-files/\n\nSTATIC_URL = '/static/'\nSTATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field\n\nDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'\n\n# Set APPEND_SLASH to False to prevent Django from redirecting URLs with trailing slashes\n# This fixes issues with DELETE requests\nAPPEND_SLASH = False\n\n# Для тестирования (вывод писем в консоль)\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\n\n# Или для реальной отправки (настройте под ваш SMTP)\nEMAIL_HOST = os.getenv('EMAIL_HOST')\nEMAIL_PORT = os.getenv('EMAIL_PORT')\nEMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS')\nEMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')\nEMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')\nDEFAULT_FROM_EMAIL = EMAIL_HOST_USER\n\nREST_FRAMEWORK = {\n 'DEFAULT_AUTHENTICATION_CLASSES': (\n 'rest_framework.authentication.TokenAuthentication',\n 'rest_framework_simplejwt.authentication.JWTAuthentication',\n ),\n 'DEFAULT_PERMISSION_CLASSES': (\n 'rest_framework.permissions.AllowAny',\n ),\n 'DEFAULT_PARSER_CLASSES': [\n 'rest_framework.parsers.JSONParser',\n 'rest_framework.parsers.MultiPartParser',\n 'rest_framework.parsers.FormParser',\n ],\n}\n\n\nSIMPLE_JWT = {\n \"ACCESS_TOKEN_LIFETIME\": timedelta(days=1),\n \"REFRESH_TOKEN_LIFETIME\": timedelta(days=2),\n \"ROTATE_REFRESH_TOKENS\": False,\n \"BLACKLIST_AFTER_ROTATION\": True,\n \"UPDATE_LAST_LOGIN\": False,\n\n \"ALGORITHM\": \"HS256\",\n \"SIGNING_KEY\": SECRET_KEY,\n \"VERIFYING_KEY\": \"\",\n \"AUDIENCE\": None,\n \"ISSUER\": None,\n \"JSON_ENCODER\": None,\n \"JWK_URL\": None,\n \"LEEWAY\": 0,\n\n \"AUTH_HEADER_TYPES\": (\"Bearer\",),\n \"AUTH_HEADER_NAME\": \"HTTP_AUTHORIZATION\",\n \"USER_ID_FIELD\": \"id\",\n \"USER_ID_CLAIM\": \"user_id\",\n \"USER_AUTHENTICATION_RULE\": \"rest_framework_simplejwt.authentication.default_user_authentication_rule\",\n\n \"AUTH_TOKEN_CLASSES\": (\"rest_framework_simplejwt.tokens.AccessToken\",),\n \"TOKEN_TYPE_CLAIM\": \"token_type\",\n \"TOKEN_USER_CLASS\": \"rest_framework_simplejwt.models.TokenUser\",\n\n \"JTI_CLAIM\": \"jti\",\n\n \"SLIDING_TOKEN_REFRESH_EXP_CLAIM\": \"refresh_exp\",\n \"SLIDING_TOKEN_LIFETIME\": timedelta(minutes=1),\n \"SLIDING_TOKEN_REFRESH_LIFETIME\": timedelta(days=2),\n\n \"TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainPairSerializer\",\n \"TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSerializer\",\n \"TOKEN_VERIFY_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenVerifySerializer\",\n \"TOKEN_BLACKLIST_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenBlacklistSerializer\",\n \"SLIDING_TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainSlidingSerializer\",\n \"SLIDING_TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSlidingSerializer\",\n}\n\nMEDIA_URL = '/media/'\nMEDIA_ROOT = os.path.join(BASE_DIR, 'media')\n\nJUDGE0_LANGUAGE_IDS = {\n 'javascript': {\n 'default': 63, # Node.js\n 'node': 63\n },\n 'python': {\n 'default': 71, # CPython 3.8.1\n 'cpython': 71,\n 'pypy': 99 # PyPy 7.3.0\n },\n 'java': {\n 'default': 62, # OpenJDK 13.0.1\n 'openjdk': 62\n },\n 'kotlin': {\n 'default': 78, # Kotlin 1.3.70\n 'kotlin-jvm': 78\n },\n 'go': {\n 'default': 60, # Go 1.13.5\n 'go': 60\n },\n 'rust': {\n 'default': 73, # Rust 1.40.0\n 'rustc': 73\n },\n 'cpp': {\n 'default': 54, # GCC 9.2.0 (C++)\n 'g++': 54\n },\n 'csharp': {\n 'default': 51, # Mono C# 6.8.0\n 'mono': 51\n },\n 'php': {\n 'default': 68, # PHP 7.4.1\n 'php': 68\n },\n 'ruby': {\n 'default': 72, # Ruby 2.7.0\n 'mri': 72\n },\n 'swift': {\n 'default': 83, # Swift 5.2.3\n 'swift': 83\n },\n 'scala': {\n 'default': 81, # Scala 2.13.2\n 'scala': 81\n }\n}\n\nJUDGE0_API_URL = os.getenv('JUDGE0_API_URL')\nJUDGE0_API_KEY = os.getenv('JUDGE0_API_KEY')\nDEEPSEEK_API_KEY = \"sk-844822d9c2214b1ab1288181a903118c\""}, "d739f9a8dbddd543e4ceac9c39c5a6b925a45ab1": {"t": 1785768975.044147, "n": 7355, "h": "8951319e6242f117", "c": "from dotenv import load_dotenv\nfrom pathlib import Path\nimport os\nfrom datetime import timedelta\n\n\nload_dotenv('.env')\n# Build paths inside the project like this: BASE_DIR / 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\nAUTH_USER_MODEL = \"registration.User\"\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = os.getenv('SECRET_KEY')\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\n\nALLOWED_HOSTS = [\"*\"]\n# Application definition\n\nINSTALLED_APPS = [\n 'django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n 'rest_framework',\n 'registration',\n 'user_profile',\n 'courses',\n 'corsheaders',\n 'rest_framework_simplejwt',\n 'drf_yasg',\n]\n\nMIDDLEWARE = [\n 'django.middleware.security.SecurityMiddleware',\n 'django.contrib.sessions.middleware.SessionMiddleware',\n 'django.middleware.common.CommonMiddleware',\n 'django.middleware.csrf.CsrfViewMiddleware',\n 'django.contrib.auth.middleware.AuthenticationMiddleware',\n 'django.contrib.messages.middleware.MessageMiddleware',\n 'django.middleware.clickjacking.XFrameOptionsMiddleware',\n 'corsheaders.middleware.CorsMiddleware',\n]\n\nROOT_URLCONF = 'main.urls'\nFRONTEND_URL = 'http://localhost:5173'\nPASSWORD_RESET_TIMEOUT = 24 * 60 *60\nCORS_ALLOWED_ORIGINS = [\n \"http://localhost:5173\",\n \"http://127.0.0.1:8000\",\n]\n\nTEMPLATES = [\n {\n 'BACKEND': 'django.template.backends.django.DjangoTemplates',\n 'DIRS': [os.path.join(BASE_DIR, 'templates')],\n 'APP_DIRS': True,\n 'OPTIONS': {\n 'context_processors': [\n 'django.template.context_processors.debug',\n 'django.template.context_processors.request',\n 'django.contrib.auth.context_processors.auth',\n 'django.contrib.messages.context_processors.messages',\n ],\n },\n },\n]\n\nWSGI_APPLICATION = 'main.wsgi.application'\n\n\n# Database\n# https://docs.djangoproject.com/en/5.1/ref/settings/#databases\n\nDATABASES = {\n 'default': {\n 'ENGINE': 'django.db.backends.postgresql',\n 'NAME': os.getenv('DB_NAME'),\n 'USER': os.getenv('DB_USER'),\n 'PASSWORD': os.getenv('DB_PASSWORD'),\n 'HOST': os.getenv('DB_HOST'),\n 'PORT': os.getenv('DB_PORT'),\n }\n}\n\n# Password validation\n# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n {\n 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',\n },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/5.1/topics/i18n/\n\nLANGUAGE_CODE = 'en-us'\n\nTIME_ZONE = 'UTC'\n\nUSE_I18N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.1/howto/static-files/\n\nSTATIC_URL = '/static/'\nSTATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field\n\nDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'\n\n# Для тестирования (вывод писем в консоль)\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\n\n# Или для реальной отправки (настройте под ваш SMTP)\nEMAIL_HOST = os.getenv('EMAIL_HOST')\nEMAIL_PORT = os.getenv('EMAIL_PORT')\nEMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS')\nEMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')\nEMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')\nDEFAULT_FROM_EMAIL = EMAIL_HOST_USER\n\nREST_FRAMEWORK = {\n 'DEFAULT_AUTHENTICATION_CLASSES': (\n 'rest_framework.authentication.TokenAuthentication',\n 'rest_framework_simplejwt.authentication.JWTAuthentication',\n ),\n 'DEFAULT_PERMISSION_CLASSES': (\n 'rest_framework.permissions.AllowAny',\n ),\n 'DEFAULT_PARSER_CLASSES': [\n 'rest_framework.parsers.JSONParser',\n 'rest_framework.parsers.MultiPartParser',\n 'rest_framework.parsers.FormParser',\n ],\n}\n\n\nSIMPLE_JWT = {\n \"ACCESS_TOKEN_LIFETIME\": timedelta(days=1),\n \"REFRESH_TOKEN_LIFETIME\": timedelta(days=2),\n \"ROTATE_REFRESH_TOKENS\": False,\n \"BLACKLIST_AFTER_ROTATION\": True,\n \"UPDATE_LAST_LOGIN\": False,\n\n \"ALGORITHM\": \"HS256\",\n \"SIGNING_KEY\": SECRET_KEY,\n \"VERIFYING_KEY\": \"\",\n \"AUDIENCE\": None,\n \"ISSUER\": None,\n \"JSON_ENCODER\": None,\n \"JWK_URL\": None,\n \"LEEWAY\": 0,\n\n \"AUTH_HEADER_TYPES\": (\"Bearer\",),\n \"AUTH_HEADER_NAME\": \"HTTP_AUTHORIZATION\",\n \"USER_ID_FIELD\": \"id\",\n \"USER_ID_CLAIM\": \"user_id\",\n \"USER_AUTHENTICATION_RULE\": \"rest_framework_simplejwt.authentication.default_user_authentication_rule\",\n\n \"AUTH_TOKEN_CLASSES\": (\"rest_framework_simplejwt.tokens.AccessToken\",),\n \"TOKEN_TYPE_CLAIM\": \"token_type\",\n \"TOKEN_USER_CLASS\": \"rest_framework_simplejwt.models.TokenUser\",\n\n \"JTI_CLAIM\": \"jti\",\n\n \"SLIDING_TOKEN_REFRESH_EXP_CLAIM\": \"refresh_exp\",\n \"SLIDING_TOKEN_LIFETIME\": timedelta(minutes=1),\n \"SLIDING_TOKEN_REFRESH_LIFETIME\": timedelta(days=2),\n\n \"TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainPairSerializer\",\n \"TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSerializer\",\n \"TOKEN_VERIFY_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenVerifySerializer\",\n \"TOKEN_BLACKLIST_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenBlacklistSerializer\",\n \"SLIDING_TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainSlidingSerializer\",\n \"SLIDING_TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSlidingSerializer\",\n}\n\nMEDIA_URL = '/media/'\nMEDIA_ROOT = os.path.join(BASE_DIR, 'media')\n\nJUDGE0_LANGUAGE_IDS = {\n 'javascript': {\n 'default': 63, # Node.js\n 'node': 63\n },\n 'python': {\n 'default': 71, # CPython 3.8.1\n 'cpython': 71,\n 'pypy': 99 # PyPy 7.3.0\n },\n 'java': {\n 'default': 62, # OpenJDK 13.0.1\n 'openjdk': 62\n },\n 'kotlin': {\n 'default': 78, # Kotlin 1.3.70\n 'kotlin-jvm': 78\n },\n 'go': {\n 'default': 60, # Go 1.13.5\n 'go': 60\n },\n 'rust': {\n 'default': 73, # Rust 1.40.0\n 'rustc': 73\n },\n 'cpp': {\n 'default': 54, # GCC 9.2.0 (C++)\n 'g++': 54\n },\n 'csharp': {\n 'default': 51, # Mono C# 6.8.0\n 'mono': 51\n },\n 'php': {\n 'default': 68, # PHP 7.4.1\n 'php': 68\n },\n 'ruby': {\n 'default': 72, # Ruby 2.7.0\n 'mri': 72\n },\n 'swift': {\n 'default': 83, # Swift 5.2.3\n 'swift': 83\n },\n 'scala': {\n 'default': 81, # Scala 2.13.2\n 'scala': 81\n }\n}\n\nJUDGE0_API_URL = os.getenv('JUDGE0_API_URL')\nJUDGE0_API_KEY = os.getenv('JUDGE0_API_KEY')\nDEEPSEEK_API_KEY = \"sk-844822d9c2214b1ab1288181a903118c\""}, "acd58f31343a59c129acc325b3e22f5227f28d03": {"t": 1785768977.3314042, "n": 7119, "h": "c5a52ed2ee1060ef", "c": "from dotenv import load_dotenv\nfrom pathlib import Path\nimport os\nfrom datetime import timedelta\n\n\nload_dotenv('.env')\n# Build paths inside the project like this: BASE_DIR / 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\nAUTH_USER_MODEL = \"registration.User\"\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = os.getenv('SECRET_KEY')\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\n\nALLOWED_HOSTS = [\"*\"]\n# Application definition\n\nINSTALLED_APPS = [\n 'django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n 'rest_framework',\n 'registration',\n 'user_profile',\n 'courses',\n 'corsheaders',\n 'rest_framework_simplejwt',\n 'drf_yasg',\n]\n\nMIDDLEWARE = [\n 'django.middleware.security.SecurityMiddleware',\n 'django.contrib.sessions.middleware.SessionMiddleware',\n 'django.middleware.common.CommonMiddleware',\n 'django.middleware.csrf.CsrfViewMiddleware',\n 'django.contrib.auth.middleware.AuthenticationMiddleware',\n 'django.contrib.messages.middleware.MessageMiddleware',\n 'django.middleware.clickjacking.XFrameOptionsMiddleware',\n 'corsheaders.middleware.CorsMiddleware',\n]\n\nROOT_URLCONF = 'main.urls'\nFRONTEND_URL = 'http://localhost:5173'\nPASSWORD_RESET_TIMEOUT = 24 * 60 *60\nCORS_ALLOWED_ORIGINS = [\n \"http://localhost:5173\",\n \"http://127.0.0.1:8000\",\n]\n\nTEMPLATES = [\n {\n 'BACKEND': 'django.template.backends.django.DjangoTemplates',\n 'DIRS': [os.path.join(BASE_DIR, 'templates')],\n 'APP_DIRS': True,\n 'OPTIONS': {\n 'context_processors': [\n 'django.template.context_processors.debug',\n 'django.template.context_processors.request',\n 'django.contrib.auth.context_processors.auth',\n 'django.contrib.messages.context_processors.messages',\n ],\n },\n },\n]\n\nWSGI_APPLICATION = 'main.wsgi.application'\n\n\n# Database\n# https://docs.djangoproject.com/en/5.1/ref/settings/#databases\n\nDATABASES = {\n 'default': {\n 'ENGINE': 'django.db.backends.postgresql',\n 'NAME': os.getenv('DB_NAME'),\n 'USER': os.getenv('DB_USER'),\n 'PASSWORD': os.getenv('DB_PASSWORD'),\n 'HOST': os.getenv('DB_HOST'),\n 'PORT': os.getenv('DB_PORT'),\n }\n}\n\n# Password validation\n# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n {\n 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',\n },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/5.1/topics/i18n/\n\nLANGUAGE_CODE = 'en-us'\n\nTIME_ZONE = 'UTC'\n\nUSE_I18N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.1/howto/static-files/\n\nSTATIC_URL = '/static/'\nSTATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field\n\nDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'\n\n# Для тестирования (вывод писем в консоль)\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\n\n# Или для реальной отправки (настройте под ваш SMTP)\nEMAIL_HOST = os.getenv('EMAIL_HOST')\nEMAIL_PORT = os.getenv('EMAIL_PORT')\nEMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS')\nEMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')\nEMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')\nDEFAULT_FROM_EMAIL = EMAIL_HOST_USER\n\nREST_FRAMEWORK = {\n 'DEFAULT_AUTHENTICATION_CLASSES': (\n 'rest_framework.authentication.TokenAuthentication',\n 'rest_framework_simplejwt.authentication.JWTAuthentication',\n ),\n 'DEFAULT_PERMISSION_CLASSES': (\n 'rest_framework.permissions.AllowAny',\n ),\n}\n\n\nSIMPLE_JWT = {\n \"ACCESS_TOKEN_LIFETIME\": timedelta(days=1),\n \"REFRESH_TOKEN_LIFETIME\": timedelta(days=2),\n \"ROTATE_REFRESH_TOKENS\": False,\n \"BLACKLIST_AFTER_ROTATION\": True,\n \"UPDATE_LAST_LOGIN\": False,\n\n \"ALGORITHM\": \"HS256\",\n \"SIGNING_KEY\": SECRET_KEY,\n \"VERIFYING_KEY\": \"\",\n \"AUDIENCE\": None,\n \"ISSUER\": None,\n \"JSON_ENCODER\": None,\n \"JWK_URL\": None,\n \"LEEWAY\": 0,\n\n \"AUTH_HEADER_TYPES\": (\"Bearer\",),\n \"AUTH_HEADER_NAME\": \"HTTP_AUTHORIZATION\",\n \"USER_ID_FIELD\": \"id\",\n \"USER_ID_CLAIM\": \"user_id\",\n \"USER_AUTHENTICATION_RULE\": \"rest_framework_simplejwt.authentication.default_user_authentication_rule\",\n\n \"AUTH_TOKEN_CLASSES\": (\"rest_framework_simplejwt.tokens.AccessToken\",),\n \"TOKEN_TYPE_CLAIM\": \"token_type\",\n \"TOKEN_USER_CLASS\": \"rest_framework_simplejwt.models.TokenUser\",\n\n \"JTI_CLAIM\": \"jti\",\n\n \"SLIDING_TOKEN_REFRESH_EXP_CLAIM\": \"refresh_exp\",\n \"SLIDING_TOKEN_LIFETIME\": timedelta(minutes=1),\n \"SLIDING_TOKEN_REFRESH_LIFETIME\": timedelta(days=2),\n\n \"TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainPairSerializer\",\n \"TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSerializer\",\n \"TOKEN_VERIFY_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenVerifySerializer\",\n \"TOKEN_BLACKLIST_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenBlacklistSerializer\",\n \"SLIDING_TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainSlidingSerializer\",\n \"SLIDING_TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSlidingSerializer\",\n}\n\nMEDIA_URL = '/media/'\nMEDIA_ROOT = os.path.join(BASE_DIR, 'media')\n\nJUDGE0_LANGUAGE_IDS = {\n 'javascript': {\n 'default': 63, # Node.js\n 'node': 63\n },\n 'python': {\n 'default': 71, # CPython 3.8.1\n 'cpython': 71,\n 'pypy': 99 # PyPy 7.3.0\n },\n 'java': {\n 'default': 62, # OpenJDK 13.0.1\n 'openjdk': 62\n },\n 'kotlin': {\n 'default': 78, # Kotlin 1.3.70\n 'kotlin-jvm': 78\n },\n 'go': {\n 'default': 60, # Go 1.13.5\n 'go': 60\n },\n 'rust': {\n 'default': 73, # Rust 1.40.0\n 'rustc': 73\n },\n 'cpp': {\n 'default': 54, # GCC 9.2.0 (C++)\n 'g++': 54\n },\n 'csharp': {\n 'default': 51, # Mono C# 6.8.0\n 'mono': 51\n },\n 'php': {\n 'default': 68, # PHP 7.4.1\n 'php': 68\n },\n 'ruby': {\n 'default': 72, # Ruby 2.7.0\n 'mri': 72\n },\n 'swift': {\n 'default': 83, # Swift 5.2.3\n 'swift': 83\n },\n 'scala': {\n 'default': 81, # Scala 2.13.2\n 'scala': 81\n }\n}\n\nJUDGE0_API_URL = os.getenv('JUDGE0_API_URL')\nJUDGE0_API_KEY = os.getenv('JUDGE0_API_KEY')"}, "469a49eec2a747cca90759e82c2c8bfb487e69a0": {"t": 1785768979.4504685, "n": 6003, "h": "b762d79aef886a9f", "c": "from dotenv import load_dotenv\nfrom pathlib import Path\nimport os\nfrom datetime import timedelta\n\n\nload_dotenv('.env')\n# Build paths inside the project like this: BASE_DIR / 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\nAUTH_USER_MODEL = \"registration.User\"\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = os.getenv('SECRET_KEY')\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\n\nALLOWED_HOSTS = [\"*\"]\n# Application definition\n\nINSTALLED_APPS = [\n 'django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n 'rest_framework',\n 'registration',\n 'user_profile',\n 'courses',\n 'corsheaders',\n 'rest_framework_simplejwt',\n 'drf_yasg',\n]\n\nMIDDLEWARE = [\n 'django.middleware.security.SecurityMiddleware',\n 'django.contrib.sessions.middleware.SessionMiddleware',\n 'django.middleware.common.CommonMiddleware',\n 'django.middleware.csrf.CsrfViewMiddleware',\n 'django.contrib.auth.middleware.AuthenticationMiddleware',\n 'django.contrib.messages.middleware.MessageMiddleware',\n 'django.middleware.clickjacking.XFrameOptionsMiddleware',\n 'corsheaders.middleware.CorsMiddleware',\n]\n\nROOT_URLCONF = 'main.urls'\nFRONTEND_URL = 'http://localhost:5173'\nPASSWORD_RESET_TIMEOUT = 24 * 60 *60\nCORS_ALLOWED_ORIGINS = [\n \"http://localhost:5173\",\n \"http://127.0.0.1:8000\",\n]\n\nTEMPLATES = [\n {\n 'BACKEND': 'django.template.backends.django.DjangoTemplates',\n 'DIRS': [os.path.join(BASE_DIR, 'templates')],\n 'APP_DIRS': True,\n 'OPTIONS': {\n 'context_processors': [\n 'django.template.context_processors.debug',\n 'django.template.context_processors.request',\n 'django.contrib.auth.context_processors.auth',\n 'django.contrib.messages.context_processors.messages',\n ],\n },\n },\n]\n\nWSGI_APPLICATION = 'main.wsgi.application'\n\n\n# Database\n# https://docs.djangoproject.com/en/5.1/ref/settings/#databases\n\nDATABASES = {\n 'default': {\n 'ENGINE': 'django.db.backends.postgresql',\n 'NAME': os.getenv('DB_NAME'),\n 'USER': os.getenv('DB_USER'),\n 'PASSWORD': os.getenv('DB_PASSWORD'),\n 'HOST': os.getenv('DB_HOST'),\n 'PORT': os.getenv('DB_PORT'),\n }\n}\n\n# Password validation\n# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n {\n 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',\n },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/5.1/topics/i18n/\n\nLANGUAGE_CODE = 'en-us'\n\nTIME_ZONE = 'UTC'\n\nUSE_I18N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.1/howto/static-files/\n\nSTATIC_URL = '/static/'\nSTATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field\n\nDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'\n\n# Для тестирования (вывод писем в консоль)\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\n\n# Или для реальной отправки (настройте под ваш SMTP)\nEMAIL_HOST = os.getenv('EMAIL_HOST')\nEMAIL_PORT = os.getenv('EMAIL_PORT')\nEMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS')\nEMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')\nEMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')\nDEFAULT_FROM_EMAIL = EMAIL_HOST_USER\n\nREST_FRAMEWORK = {\n 'DEFAULT_AUTHENTICATION_CLASSES': (\n 'rest_framework.authentication.TokenAuthentication',\n 'rest_framework_simplejwt.authentication.JWTAuthentication',\n ),\n 'DEFAULT_PERMISSION_CLASSES': (\n 'rest_framework.permissions.AllowAny',\n ),\n}\n\n\nSIMPLE_JWT = {\n \"ACCESS_TOKEN_LIFETIME\": timedelta(days=1),\n \"REFRESH_TOKEN_LIFETIME\": timedelta(days=2),\n \"ROTATE_REFRESH_TOKENS\": False,\n \"BLACKLIST_AFTER_ROTATION\": True,\n \"UPDATE_LAST_LOGIN\": False,\n\n \"ALGORITHM\": \"HS256\",\n \"SIGNING_KEY\": SECRET_KEY,\n \"VERIFYING_KEY\": \"\",\n \"AUDIENCE\": None,\n \"ISSUER\": None,\n \"JSON_ENCODER\": None,\n \"JWK_URL\": None,\n \"LEEWAY\": 0,\n\n \"AUTH_HEADER_TYPES\": (\"Bearer\",),\n \"AUTH_HEADER_NAME\": \"HTTP_AUTHORIZATION\",\n \"USER_ID_FIELD\": \"id\",\n \"USER_ID_CLAIM\": \"user_id\",\n \"USER_AUTHENTICATION_RULE\": \"rest_framework_simplejwt.authentication.default_user_authentication_rule\",\n\n \"AUTH_TOKEN_CLASSES\": (\"rest_framework_simplejwt.tokens.AccessToken\",),\n \"TOKEN_TYPE_CLAIM\": \"token_type\",\n \"TOKEN_USER_CLASS\": \"rest_framework_simplejwt.models.TokenUser\",\n\n \"JTI_CLAIM\": \"jti\",\n\n \"SLIDING_TOKEN_REFRESH_EXP_CLAIM\": \"refresh_exp\",\n \"SLIDING_TOKEN_LIFETIME\": timedelta(minutes=1),\n \"SLIDING_TOKEN_REFRESH_LIFETIME\": timedelta(days=2),\n\n \"TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainPairSerializer\",\n \"TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSerializer\",\n \"TOKEN_VERIFY_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenVerifySerializer\",\n \"TOKEN_BLACKLIST_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenBlacklistSerializer\",\n \"SLIDING_TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainSlidingSerializer\",\n \"SLIDING_TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSlidingSerializer\",\n}\n\nMEDIA_URL = '/media/'\nMEDIA_ROOT = os.path.join(BASE_DIR, 'media')"}, "e95a75f1f400c7b09f7c412b11a55a13a5737c71": {"t": 1785768985.235325, "n": 6003, "h": "b762d79aef886a9f", "c": "from dotenv import load_dotenv\nfrom pathlib import Path\nimport os\nfrom datetime import timedelta\n\n\nload_dotenv('.env')\n# Build paths inside the project like this: BASE_DIR / 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\nAUTH_USER_MODEL = \"registration.User\"\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = os.getenv('SECRET_KEY')\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\n\nALLOWED_HOSTS = [\"*\"]\n# Application definition\n\nINSTALLED_APPS = [\n 'django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n 'rest_framework',\n 'registration',\n 'user_profile',\n 'courses',\n 'corsheaders',\n 'rest_framework_simplejwt',\n 'drf_yasg',\n]\n\nMIDDLEWARE = [\n 'django.middleware.security.SecurityMiddleware',\n 'django.contrib.sessions.middleware.SessionMiddleware',\n 'django.middleware.common.CommonMiddleware',\n 'django.middleware.csrf.CsrfViewMiddleware',\n 'django.contrib.auth.middleware.AuthenticationMiddleware',\n 'django.contrib.messages.middleware.MessageMiddleware',\n 'django.middleware.clickjacking.XFrameOptionsMiddleware',\n 'corsheaders.middleware.CorsMiddleware',\n]\n\nROOT_URLCONF = 'main.urls'\nFRONTEND_URL = 'http://localhost:5173'\nPASSWORD_RESET_TIMEOUT = 24 * 60 *60\nCORS_ALLOWED_ORIGINS = [\n \"http://localhost:5173\",\n \"http://127.0.0.1:8000\",\n]\n\nTEMPLATES = [\n {\n 'BACKEND': 'django.template.backends.django.DjangoTemplates',\n 'DIRS': [os.path.join(BASE_DIR, 'templates')],\n 'APP_DIRS': True,\n 'OPTIONS': {\n 'context_processors': [\n 'django.template.context_processors.debug',\n 'django.template.context_processors.request',\n 'django.contrib.auth.context_processors.auth',\n 'django.contrib.messages.context_processors.messages',\n ],\n },\n },\n]\n\nWSGI_APPLICATION = 'main.wsgi.application'\n\n\n# Database\n# https://docs.djangoproject.com/en/5.1/ref/settings/#databases\n\nDATABASES = {\n 'default': {\n 'ENGINE': 'django.db.backends.postgresql',\n 'NAME': os.getenv('DB_NAME'),\n 'USER': os.getenv('DB_USER'),\n 'PASSWORD': os.getenv('DB_PASSWORD'),\n 'HOST': os.getenv('DB_HOST'),\n 'PORT': os.getenv('DB_PORT'),\n }\n}\n\n# Password validation\n# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n {\n 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',\n },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/5.1/topics/i18n/\n\nLANGUAGE_CODE = 'en-us'\n\nTIME_ZONE = 'UTC'\n\nUSE_I18N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.1/howto/static-files/\n\nSTATIC_URL = '/static/'\nSTATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field\n\nDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'\n\n# Для тестирования (вывод писем в консоль)\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\n\n# Или для реальной отправки (настройте под ваш SMTP)\nEMAIL_HOST = os.getenv('EMAIL_HOST')\nEMAIL_PORT = os.getenv('EMAIL_PORT')\nEMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS')\nEMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')\nEMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')\nDEFAULT_FROM_EMAIL = EMAIL_HOST_USER\n\nREST_FRAMEWORK = {\n 'DEFAULT_AUTHENTICATION_CLASSES': (\n 'rest_framework.authentication.TokenAuthentication',\n 'rest_framework_simplejwt.authentication.JWTAuthentication',\n ),\n 'DEFAULT_PERMISSION_CLASSES': (\n 'rest_framework.permissions.AllowAny',\n ),\n}\n\n\nSIMPLE_JWT = {\n \"ACCESS_TOKEN_LIFETIME\": timedelta(days=1),\n \"REFRESH_TOKEN_LIFETIME\": timedelta(days=2),\n \"ROTATE_REFRESH_TOKENS\": False,\n \"BLACKLIST_AFTER_ROTATION\": True,\n \"UPDATE_LAST_LOGIN\": False,\n\n \"ALGORITHM\": \"HS256\",\n \"SIGNING_KEY\": SECRET_KEY,\n \"VERIFYING_KEY\": \"\",\n \"AUDIENCE\": None,\n \"ISSUER\": None,\n \"JSON_ENCODER\": None,\n \"JWK_URL\": None,\n \"LEEWAY\": 0,\n\n \"AUTH_HEADER_TYPES\": (\"Bearer\",),\n \"AUTH_HEADER_NAME\": \"HTTP_AUTHORIZATION\",\n \"USER_ID_FIELD\": \"id\",\n \"USER_ID_CLAIM\": \"user_id\",\n \"USER_AUTHENTICATION_RULE\": \"rest_framework_simplejwt.authentication.default_user_authentication_rule\",\n\n \"AUTH_TOKEN_CLASSES\": (\"rest_framework_simplejwt.tokens.AccessToken\",),\n \"TOKEN_TYPE_CLAIM\": \"token_type\",\n \"TOKEN_USER_CLASS\": \"rest_framework_simplejwt.models.TokenUser\",\n\n \"JTI_CLAIM\": \"jti\",\n\n \"SLIDING_TOKEN_REFRESH_EXP_CLAIM\": \"refresh_exp\",\n \"SLIDING_TOKEN_LIFETIME\": timedelta(minutes=1),\n \"SLIDING_TOKEN_REFRESH_LIFETIME\": timedelta(days=2),\n\n \"TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainPairSerializer\",\n \"TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSerializer\",\n \"TOKEN_VERIFY_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenVerifySerializer\",\n \"TOKEN_BLACKLIST_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenBlacklistSerializer\",\n \"SLIDING_TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainSlidingSerializer\",\n \"SLIDING_TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSlidingSerializer\",\n}\n\nMEDIA_URL = '/media/'\nMEDIA_ROOT = os.path.join(BASE_DIR, 'media')"}, "02f20243cf3839002e2c9898c68c6697602b1bed": {"t": 1785768987.9137607, "n": 6009, "h": "af02cd459751f9df", "c": "from dotenv import load_dotenv\nfrom pathlib import Path\nimport os\nfrom datetime import timedelta\n\n\nload_dotenv('.env')\n# Build paths inside the project like this: BASE_DIR / 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\nAUTH_USER_MODEL = \"registration.User\"\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = os.getenv('SECRET_KEY')\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\n\nALLOWED_HOSTS = [\"*\"]\n\n\n# Application definition\n\nINSTALLED_APPS = [\n 'django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n 'rest_framework',\n 'registration',\n 'user_profile',\n 'courses',\n 'corsheaders',\n 'rest_framework_simplejwt',\n 'drf_yasg',\n]\n\nMIDDLEWARE = [\n 'django.middleware.security.SecurityMiddleware',\n 'django.contrib.sessions.middleware.SessionMiddleware',\n 'django.middleware.common.CommonMiddleware',\n 'django.middleware.csrf.CsrfViewMiddleware',\n 'django.contrib.auth.middleware.AuthenticationMiddleware',\n 'django.contrib.messages.middleware.MessageMiddleware',\n 'django.middleware.clickjacking.XFrameOptionsMiddleware',\n 'corsheaders.middleware.CorsMiddleware',\n]\n\nROOT_URLCONF = 'main.urls'\nFRONTEND_URL = 'http://localhost:5173'\nPASSWORD_RESET_TIMEOUT = 24 * 60 *60\nCORS_ALLOWED_ORIGINS = [\n \"http://localhost:5173\",\n \"http://127.0.0.1:8000\",\n]\n\nTEMPLATES = [\n {\n 'BACKEND': 'django.template.backends.django.DjangoTemplates',\n 'DIRS': [os.path.join(BASE_DIR, 'templates')],\n 'APP_DIRS': True,\n 'OPTIONS': {\n 'context_processors': [\n 'django.template.context_processors.debug',\n 'django.template.context_processors.request',\n 'django.contrib.auth.context_processors.auth',\n 'django.contrib.messages.context_processors.messages',\n ],\n },\n },\n]\n\nWSGI_APPLICATION = 'main.wsgi.application'\n\n\n# Database\n# https://docs.djangoproject.com/en/5.1/ref/settings/#databases\n\nDATABASES = {\n 'default': {\n 'ENGINE': 'django.db.backends.postgresql',\n 'NAME': os.getenv('DB_NAME'),\n 'USER': os.getenv('DB_USER'),\n 'PASSWORD': os.getenv('DB_PASSWORD'),\n 'HOST': os.getenv('DB_HOST'),\n 'PORT': os.getenv('DB_PORT'),\n }\n}\n\n# Password validation\n# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n {\n 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',\n },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/5.1/topics/i18n/\n\nLANGUAGE_CODE = 'en-us'\n\nTIME_ZONE = 'UTC'\n\nUSE_I18N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.1/howto/static-files/\n\nSTATIC_URL = '/static/'\nSTATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field\n\nDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'\n\n# Для тестирования (вывод писем в консоль)\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\n\n# Или для реальной отправки (настройте под ваш SMTP)\nEMAIL_HOST = os.getenv('EMAIL_HOST')\nEMAIL_PORT = os.getenv('EMAIL_PORT')\nEMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS')\nEMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')\nEMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')\nDEFAULT_FROM_EMAIL = EMAIL_HOST_USER\n\nREST_FRAMEWORK = {\n 'DEFAULT_AUTHENTICATION_CLASSES': (\n 'rest_framework.authentication.TokenAuthentication',\n 'rest_framework_simplejwt.authentication.JWTAuthentication',\n ),\n 'DEFAULT_PERMISSION_CLASSES': (\n 'rest_framework.permissions.AllowAny',\n ),\n}\n\n\nSIMPLE_JWT = {\n \"ACCESS_TOKEN_LIFETIME\": timedelta(minutes=60),\n \"REFRESH_TOKEN_LIFETIME\": timedelta(days=2),\n \"ROTATE_REFRESH_TOKENS\": False,\n \"BLACKLIST_AFTER_ROTATION\": True,\n \"UPDATE_LAST_LOGIN\": False,\n\n \"ALGORITHM\": \"HS256\",\n \"SIGNING_KEY\": SECRET_KEY,\n \"VERIFYING_KEY\": \"\",\n \"AUDIENCE\": None,\n \"ISSUER\": None,\n \"JSON_ENCODER\": None,\n \"JWK_URL\": None,\n \"LEEWAY\": 0,\n\n \"AUTH_HEADER_TYPES\": (\"Bearer\",),\n \"AUTH_HEADER_NAME\": \"HTTP_AUTHORIZATION\",\n \"USER_ID_FIELD\": \"id\",\n \"USER_ID_CLAIM\": \"user_id\",\n \"USER_AUTHENTICATION_RULE\": \"rest_framework_simplejwt.authentication.default_user_authentication_rule\",\n\n \"AUTH_TOKEN_CLASSES\": (\"rest_framework_simplejwt.tokens.AccessToken\",),\n \"TOKEN_TYPE_CLAIM\": \"token_type\",\n \"TOKEN_USER_CLASS\": \"rest_framework_simplejwt.models.TokenUser\",\n\n \"JTI_CLAIM\": \"jti\",\n\n \"SLIDING_TOKEN_REFRESH_EXP_CLAIM\": \"refresh_exp\",\n \"SLIDING_TOKEN_LIFETIME\": timedelta(minutes=1),\n \"SLIDING_TOKEN_REFRESH_LIFETIME\": timedelta(days=2),\n\n \"TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainPairSerializer\",\n \"TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSerializer\",\n \"TOKEN_VERIFY_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenVerifySerializer\",\n \"TOKEN_BLACKLIST_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenBlacklistSerializer\",\n \"SLIDING_TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainSlidingSerializer\",\n \"SLIDING_TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSlidingSerializer\",\n}\n\nMEDIA_URL = '/media/'\nMEDIA_ROOT = os.path.join(BASE_DIR, 'media')"}, "01765f2c2728fd59e95b3393782e8fab1a8a4037": {"t": 1785768989.7011766, "n": 5926, "h": "67ddceeaf6cf4747", "c": "from dotenv import load_dotenv\nfrom pathlib import Path\nimport os\nfrom datetime import timedelta\n\n\nload_dotenv('.env')\n# Build paths inside the project like this: BASE_DIR / 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\nAUTH_USER_MODEL = \"registration.User\"\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = os.getenv('SECRET_KEY')\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\n\nALLOWED_HOSTS = [\"*\"]\n\n\n# Application definition\n\nINSTALLED_APPS = [\n 'django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n 'rest_framework',\n 'registration',\n 'user_profile',\n 'corsheaders',\n 'rest_framework_simplejwt',\n 'drf_yasg',\n]\n\nMIDDLEWARE = [\n 'django.middleware.security.SecurityMiddleware',\n 'django.contrib.sessions.middleware.SessionMiddleware',\n 'django.middleware.common.CommonMiddleware',\n 'django.middleware.csrf.CsrfViewMiddleware',\n 'django.contrib.auth.middleware.AuthenticationMiddleware',\n 'django.contrib.messages.middleware.MessageMiddleware',\n 'django.middleware.clickjacking.XFrameOptionsMiddleware',\n 'corsheaders.middleware.CorsMiddleware',\n]\n\nROOT_URLCONF = 'main.urls'\nFRONTEND_URL = 'http://localhost:5173'\nPASSWORD_RESET_TIMEOUT = 24 * 60 *60\nCORS_ALLOWED_ORIGINS = [\n \"http://localhost:5173\",\n \"http://127.0.0.1:8000\",\n]\n\nTEMPLATES = [\n {\n 'BACKEND': 'django.template.backends.django.DjangoTemplates',\n 'DIRS': [os.path.join(BASE_DIR, 'templates')],\n 'APP_DIRS': True,\n 'OPTIONS': {\n 'context_processors': [\n 'django.template.context_processors.debug',\n 'django.template.context_processors.request',\n 'django.contrib.auth.context_processors.auth',\n 'django.contrib.messages.context_processors.messages',\n ],\n },\n },\n]\n\nWSGI_APPLICATION = 'main.wsgi.application'\n\n\n# Database\n# https://docs.djangoproject.com/en/5.1/ref/settings/#databases\n\nDATABASES = {\n 'default': {\n 'ENGINE': 'django.db.backends.postgresql',\n 'NAME': os.getenv('DB_NAME'),\n 'USER': os.getenv('DB_USER'),\n 'PASSWORD': os.getenv('DB_PASSWORD'),\n 'HOST': os.getenv('DB_HOST'),\n 'PORT': os.getenv('DB_PORT'),\n }\n}\n\n# Password validation\n# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n {\n 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',\n },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/5.1/topics/i18n/\n\nLANGUAGE_CODE = 'en-us'\n\nTIME_ZONE = 'UTC'\n\nUSE_I18N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.1/howto/static-files/\n\nSTATIC_URL = '/static/'\nSTATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field\n\nDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'\n\n# Для тестирования (вывод писем в консоль)\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\n\n# Или для реальной отправки (настройте под ваш SMTP)\nEMAIL_HOST = os.getenv('EMAIL_HOST')\nEMAIL_PORT = os.getenv('EMAIL_PORT')\nEMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS')\nEMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')\nEMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')\nDEFAULT_FROM_EMAIL = EMAIL_HOST_USER\n\nREST_FRAMEWORK = {\n 'DEFAULT_AUTHENTICATION_CLASSES': (\n 'rest_framework.authentication.TokenAuthentication',\n 'rest_framework_simplejwt.authentication.JWTAuthentication',\n ),\n 'DEFAULT_PERMISSION_CLASSES': (\n 'rest_framework.permissions.AllowAny',\n ),\n}\n\n\nSIMPLE_JWT = {\n \"ACCESS_TOKEN_LIFETIME\": timedelta(minutes=60),\n \"REFRESH_TOKEN_LIFETIME\": timedelta(days=2),\n \"ROTATE_REFRESH_TOKENS\": False,\n \"BLACKLIST_AFTER_ROTATION\": True,\n \"UPDATE_LAST_LOGIN\": False,\n\n \"ALGORITHM\": \"HS256\",\n \"SIGNING_KEY\": SECRET_KEY,\n \"VERIFYING_KEY\": \"\",\n \"AUDIENCE\": None,\n \"ISSUER\": None,\n \"JSON_ENCODER\": None,\n \"JWK_URL\": None,\n \"LEEWAY\": 0,\n\n \"AUTH_HEADER_TYPES\": (\"Bearer\",),\n \"AUTH_HEADER_NAME\": \"HTTP_AUTHORIZATION\",\n \"USER_ID_FIELD\": \"id\",\n \"USER_ID_CLAIM\": \"user_id\",\n \"USER_AUTHENTICATION_RULE\": \"rest_framework_simplejwt.authentication.default_user_authentication_rule\",\n\n \"AUTH_TOKEN_CLASSES\": (\"rest_framework_simplejwt.tokens.AccessToken\",),\n \"TOKEN_TYPE_CLAIM\": \"token_type\",\n \"TOKEN_USER_CLASS\": \"rest_framework_simplejwt.models.TokenUser\",\n\n \"JTI_CLAIM\": \"jti\",\n\n \"SLIDING_TOKEN_REFRESH_EXP_CLAIM\": \"refresh_exp\",\n \"SLIDING_TOKEN_LIFETIME\": timedelta(minutes=1),\n \"SLIDING_TOKEN_REFRESH_LIFETIME\": timedelta(days=2),\n\n \"TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainPairSerializer\",\n \"TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSerializer\",\n \"TOKEN_VERIFY_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenVerifySerializer\",\n \"TOKEN_BLACKLIST_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenBlacklistSerializer\",\n \"SLIDING_TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainSlidingSerializer\",\n \"SLIDING_TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSlidingSerializer\",\n}"}, "0d39aaea48ceb40dee32e72fc6c660171352cde0": {"t": 1785768991.3170784, "n": 5817, "h": "3ec1a7b597d4a978", "c": "from dotenv import load_dotenv\nfrom pathlib import Path\nimport os\nfrom datetime import timedelta\n\n\nload_dotenv('.env')\n# Build paths inside the project like this: BASE_DIR / 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\nAUTH_USER_MODEL = \"registration.User\"\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = os.getenv('SECRET_KEY')\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\n\nALLOWED_HOSTS = [\"*\"]\n\n\n# Application definition\n\nINSTALLED_APPS = [\n 'django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n 'rest_framework',\n 'registration',\n 'user_profile',\n 'corsheaders',\n 'rest_framework_simplejwt',\n 'drf_yasg',\n]\n\nMIDDLEWARE = [\n 'django.middleware.security.SecurityMiddleware',\n 'django.contrib.sessions.middleware.SessionMiddleware',\n 'django.middleware.common.CommonMiddleware',\n 'django.middleware.csrf.CsrfViewMiddleware',\n 'django.contrib.auth.middleware.AuthenticationMiddleware',\n 'django.contrib.messages.middleware.MessageMiddleware',\n 'django.middleware.clickjacking.XFrameOptionsMiddleware',\n 'corsheaders.middleware.CorsMiddleware',\n]\n\nROOT_URLCONF = 'main.urls'\n\nCORS_ALLOWED_ORIGINS = [\n \"http://localhost:5173\",\n \"http://127.0.0.1:8000\",\n]\n\nTEMPLATES = [\n {\n 'BACKEND': 'django.template.backends.django.DjangoTemplates',\n 'DIRS': [],\n 'APP_DIRS': True,\n 'OPTIONS': {\n 'context_processors': [\n 'django.template.context_processors.debug',\n 'django.template.context_processors.request',\n 'django.contrib.auth.context_processors.auth',\n 'django.contrib.messages.context_processors.messages',\n ],\n },\n },\n]\n\nWSGI_APPLICATION = 'main.wsgi.application'\n\n\n# Database\n# https://docs.djangoproject.com/en/5.1/ref/settings/#databases\n\nDATABASES = {\n 'default': {\n 'ENGINE': 'django.db.backends.postgresql',\n 'NAME': os.getenv('DB_NAME'),\n 'USER': os.getenv('DB_USER'),\n 'PASSWORD': os.getenv('DB_PASSWORD'),\n 'HOST': os.getenv('DB_HOST'),\n 'PORT': os.getenv('DB_PORT'),\n }\n}\n\n# Password validation\n# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n {\n 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',\n },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/5.1/topics/i18n/\n\nLANGUAGE_CODE = 'en-us'\n\nTIME_ZONE = 'UTC'\n\nUSE_I18N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.1/howto/static-files/\n\nSTATIC_URL = '/static/'\nSTATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field\n\nDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'\n\n# Для тестирования (вывод писем в консоль)\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\n\n# Или для реальной отправки (настройте под ваш SMTP)\nEMAIL_HOST = os.getenv('EMAIL_HOST')\nEMAIL_PORT = os.getenv('EMAIL_PORT')\nEMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS')\nEMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')\nEMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')\nDEFAULT_FROM_EMAIL = EMAIL_HOST_USER\n\nREST_FRAMEWORK = {\n 'DEFAULT_AUTHENTICATION_CLASSES': (\n 'rest_framework.authentication.TokenAuthentication',\n 'rest_framework_simplejwt.authentication.JWTAuthentication',\n ),\n 'DEFAULT_PERMISSION_CLASSES': (\n 'rest_framework.permissions.AllowAny',\n ),\n}\n\n\nSIMPLE_JWT = {\n \"ACCESS_TOKEN_LIFETIME\": timedelta(minutes=60),\n \"REFRESH_TOKEN_LIFETIME\": timedelta(days=2),\n \"ROTATE_REFRESH_TOKENS\": False,\n \"BLACKLIST_AFTER_ROTATION\": False,\n \"UPDATE_LAST_LOGIN\": False,\n\n \"ALGORITHM\": \"HS256\",\n \"SIGNING_KEY\": SECRET_KEY,\n \"VERIFYING_KEY\": \"\",\n \"AUDIENCE\": None,\n \"ISSUER\": None,\n \"JSON_ENCODER\": None,\n \"JWK_URL\": None,\n \"LEEWAY\": 0,\n\n \"AUTH_HEADER_TYPES\": (\"Bearer\",),\n \"AUTH_HEADER_NAME\": \"HTTP_AUTHORIZATION\",\n \"USER_ID_FIELD\": \"id\",\n \"USER_ID_CLAIM\": \"user_id\",\n \"USER_AUTHENTICATION_RULE\": \"rest_framework_simplejwt.authentication.default_user_authentication_rule\",\n\n \"AUTH_TOKEN_CLASSES\": (\"rest_framework_simplejwt.tokens.AccessToken\",),\n \"TOKEN_TYPE_CLAIM\": \"token_type\",\n \"TOKEN_USER_CLASS\": \"rest_framework_simplejwt.models.TokenUser\",\n\n \"JTI_CLAIM\": \"jti\",\n\n \"SLIDING_TOKEN_REFRESH_EXP_CLAIM\": \"refresh_exp\",\n \"SLIDING_TOKEN_LIFETIME\": timedelta(minutes=1),\n \"SLIDING_TOKEN_REFRESH_LIFETIME\": timedelta(days=2),\n\n \"TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainPairSerializer\",\n \"TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSerializer\",\n \"TOKEN_VERIFY_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenVerifySerializer\",\n \"TOKEN_BLACKLIST_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenBlacklistSerializer\",\n \"SLIDING_TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainSlidingSerializer\",\n \"SLIDING_TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSlidingSerializer\",\n}"}, "81cc3bfe1be9496e9c34eb4b135d7add930344f9": {"t": 1785768993.6477954, "n": 5816, "h": "1e77ac7da9bb9adb", "c": "from dotenv import load_dotenv\nfrom pathlib import Path\nimport os\nfrom datetime import timedelta\n\n\nload_dotenv('.env')\n# Build paths inside the project like this: BASE_DIR / 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\nAUTH_USER_MODEL = \"registration.User\"\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = os.getenv('SECRET_KEY')\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\n\nALLOWED_HOSTS = [\"*\"]\n\n\n# Application definition\n\nINSTALLED_APPS = [\n 'django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n 'rest_framework',\n 'registration',\n 'user_profile',\n 'corsheaders',\n 'rest_framework_simplejwt',\n 'drf_yasg',\n]\n\nMIDDLEWARE = [\n 'django.middleware.security.SecurityMiddleware',\n 'django.contrib.sessions.middleware.SessionMiddleware',\n 'django.middleware.common.CommonMiddleware',\n 'django.middleware.csrf.CsrfViewMiddleware',\n 'django.contrib.auth.middleware.AuthenticationMiddleware',\n 'django.contrib.messages.middleware.MessageMiddleware',\n 'django.middleware.clickjacking.XFrameOptionsMiddleware',\n 'corsheaders.middleware.CorsMiddleware',\n]\n\nROOT_URLCONF = 'main.urls'\n\nCORS_ALLOWED_ORIGINS = [\n \"http://localhost:5173\",\n \"http://127.0.0.1:8000\",\n]\n\nTEMPLATES = [\n {\n 'BACKEND': 'django.template.backends.django.DjangoTemplates',\n 'DIRS': [],\n 'APP_DIRS': True,\n 'OPTIONS': {\n 'context_processors': [\n 'django.template.context_processors.debug',\n 'django.template.context_processors.request',\n 'django.contrib.auth.context_processors.auth',\n 'django.contrib.messages.context_processors.messages',\n ],\n },\n },\n]\n\nWSGI_APPLICATION = 'main.wsgi.application'\n\n\n# Database\n# https://docs.djangoproject.com/en/5.1/ref/settings/#databases\n\nDATABASES = {\n 'default': {\n 'ENGINE': 'django.db.backends.postgresql',\n 'NAME': os.getenv('DB_NAME'),\n 'USER': os.getenv('DB_USER'),\n 'PASSWORD': os.getenv('DB_PASSWORD'),\n 'HOST': os.getenv('DB_HOST'),\n 'PORT': os.getenv('DB_PORT'),\n }\n}\n\n# Password validation\n# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n {\n 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',\n },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/5.1/topics/i18n/\n\nLANGUAGE_CODE = 'en-us'\n\nTIME_ZONE = 'UTC'\n\nUSE_I18N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.1/howto/static-files/\n\nSTATIC_URL = '/static/'\nSTATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field\n\nDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'\n\n# Для тестирования (вывод писем в консоль)\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\n\n# Или для реальной отправки (настройте под ваш SMTP)\nEMAIL_HOST = os.getenv('EMAIL_HOST')\nEMAIL_PORT = os.getenv('EMAIL_PORT')\nEMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS')\nEMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')\nEMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')\nDEFAULT_FROM_EMAIL = EMAIL_HOST_USER\n\nREST_FRAMEWORK = {\n 'DEFAULT_AUTHENTICATION_CLASSES': (\n 'rest_framework.authentication.TokenAuthentication',\n 'rest_framework_simplejwt.authentication.JWTAuthentication',\n ),\n 'DEFAULT_PERMISSION_CLASSES': (\n 'rest_framework.permissions.AllowAny',\n ),\n}\n\n\nSIMPLE_JWT = {\n \"ACCESS_TOKEN_LIFETIME\": timedelta(minutes=1),\n \"REFRESH_TOKEN_LIFETIME\": timedelta(days=2),\n \"ROTATE_REFRESH_TOKENS\": False,\n \"BLACKLIST_AFTER_ROTATION\": False,\n \"UPDATE_LAST_LOGIN\": False,\n\n \"ALGORITHM\": \"HS256\",\n \"SIGNING_KEY\": SECRET_KEY,\n \"VERIFYING_KEY\": \"\",\n \"AUDIENCE\": None,\n \"ISSUER\": None,\n \"JSON_ENCODER\": None,\n \"JWK_URL\": None,\n \"LEEWAY\": 0,\n\n \"AUTH_HEADER_TYPES\": (\"Bearer\",),\n \"AUTH_HEADER_NAME\": \"HTTP_AUTHORIZATION\",\n \"USER_ID_FIELD\": \"id\",\n \"USER_ID_CLAIM\": \"user_id\",\n \"USER_AUTHENTICATION_RULE\": \"rest_framework_simplejwt.authentication.default_user_authentication_rule\",\n\n \"AUTH_TOKEN_CLASSES\": (\"rest_framework_simplejwt.tokens.AccessToken\",),\n \"TOKEN_TYPE_CLAIM\": \"token_type\",\n \"TOKEN_USER_CLASS\": \"rest_framework_simplejwt.models.TokenUser\",\n\n \"JTI_CLAIM\": \"jti\",\n\n \"SLIDING_TOKEN_REFRESH_EXP_CLAIM\": \"refresh_exp\",\n \"SLIDING_TOKEN_LIFETIME\": timedelta(minutes=1),\n \"SLIDING_TOKEN_REFRESH_LIFETIME\": timedelta(days=2),\n\n \"TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainPairSerializer\",\n \"TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSerializer\",\n \"TOKEN_VERIFY_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenVerifySerializer\",\n \"TOKEN_BLACKLIST_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenBlacklistSerializer\",\n \"SLIDING_TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainSlidingSerializer\",\n \"SLIDING_TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSlidingSerializer\",\n}"}, "5f3d7b8e040cf730ea20d15a7a8c26e33008b7ec": {"t": 1785768994.8872259, "n": 5755, "h": "673908f7a5276674", "c": "from dotenv import load_dotenv\nfrom pathlib import Path\nimport os\nfrom datetime import timedelta\n\n\nload_dotenv('.env')\n# Build paths inside the project like this: BASE_DIR / 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\nAUTH_USER_MODEL = \"registration.User\"\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = os.getenv('SECRET_KEY')\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\n\nALLOWED_HOSTS = [\"*\"]\n\n\n# Application definition\n\nINSTALLED_APPS = [\n 'django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n 'rest_framework',\n 'registration',\n 'user_profile',\n 'corsheaders',\n 'rest_framework_simplejwt',\n 'drf_yasg',\n]\n\nMIDDLEWARE = [\n 'django.middleware.security.SecurityMiddleware',\n 'django.contrib.sessions.middleware.SessionMiddleware',\n 'django.middleware.common.CommonMiddleware',\n 'django.middleware.csrf.CsrfViewMiddleware',\n 'django.contrib.auth.middleware.AuthenticationMiddleware',\n 'django.contrib.messages.middleware.MessageMiddleware',\n 'django.middleware.clickjacking.XFrameOptionsMiddleware',\n 'corsheaders.middleware.CorsMiddleware',\n]\n\nROOT_URLCONF = 'main.urls'\n\nCORS_ALLOWED_ORIGINS = [\n \"http://localhost:5173\",\n \"http://127.0.0.1:8000\",\n]\n\nTEMPLATES = [\n {\n 'BACKEND': 'django.template.backends.django.DjangoTemplates',\n 'DIRS': [],\n 'APP_DIRS': True,\n 'OPTIONS': {\n 'context_processors': [\n 'django.template.context_processors.debug',\n 'django.template.context_processors.request',\n 'django.contrib.auth.context_processors.auth',\n 'django.contrib.messages.context_processors.messages',\n ],\n },\n },\n]\n\nWSGI_APPLICATION = 'main.wsgi.application'\n\n\n# Database\n# https://docs.djangoproject.com/en/5.1/ref/settings/#databases\n\nDATABASES = {\n 'default': {\n 'ENGINE': 'django.db.backends.postgresql',\n 'NAME': os.getenv('DB_NAME'),\n 'USER': os.getenv('DB_USER'),\n 'PASSWORD': os.getenv('DB_PASSWORD'),\n 'HOST': os.getenv('DB_HOST'),\n 'PORT': os.getenv('DB_PORT'),\n }\n}\n\n# Password validation\n# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n {\n 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',\n },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/5.1/topics/i18n/\n\nLANGUAGE_CODE = 'en-us'\n\nTIME_ZONE = 'UTC'\n\nUSE_I18N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.1/howto/static-files/\n\nSTATIC_URL = '/static/'\nSTATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field\n\nDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'\n\n# Для тестирования (вывод писем в консоль)\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\n\n# Или для реальной отправки (настройте под ваш SMTP)\nEMAIL_HOST = os.getenv('EMAIL_HOST')\nEMAIL_PORT = os.getenv('EMAIL_PORT')\nEMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS')\nEMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')\nEMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')\nDEFAULT_FROM_EMAIL = EMAIL_HOST_USER\n\nREST_FRAMEWORK = {\n 'DEFAULT_AUTHENTICATION_CLASSES': (\n 'rest_framework_simplejwt.authentication.JWTAuthentication',\n ),\n 'DEFAULT_PERMISSION_CLASSES': (\n 'rest_framework.permissions.AllowAny',\n ),\n}\n\n\nSIMPLE_JWT = {\n \"ACCESS_TOKEN_LIFETIME\": timedelta(minutes=1),\n \"REFRESH_TOKEN_LIFETIME\": timedelta(days=2),\n \"ROTATE_REFRESH_TOKENS\": False,\n \"BLACKLIST_AFTER_ROTATION\": False,\n \"UPDATE_LAST_LOGIN\": False,\n\n \"ALGORITHM\": \"HS256\",\n \"SIGNING_KEY\": SECRET_KEY,\n \"VERIFYING_KEY\": \"\",\n \"AUDIENCE\": None,\n \"ISSUER\": None,\n \"JSON_ENCODER\": None,\n \"JWK_URL\": None,\n \"LEEWAY\": 0,\n\n \"AUTH_HEADER_TYPES\": (\"Bearer\",),\n \"AUTH_HEADER_NAME\": \"HTTP_AUTHORIZATION\",\n \"USER_ID_FIELD\": \"id\",\n \"USER_ID_CLAIM\": \"user_id\",\n \"USER_AUTHENTICATION_RULE\": \"rest_framework_simplejwt.authentication.default_user_authentication_rule\",\n\n \"AUTH_TOKEN_CLASSES\": (\"rest_framework_simplejwt.tokens.AccessToken\",),\n \"TOKEN_TYPE_CLAIM\": \"token_type\",\n \"TOKEN_USER_CLASS\": \"rest_framework_simplejwt.models.TokenUser\",\n\n \"JTI_CLAIM\": \"jti\",\n\n \"SLIDING_TOKEN_REFRESH_EXP_CLAIM\": \"refresh_exp\",\n \"SLIDING_TOKEN_LIFETIME\": timedelta(minutes=1),\n \"SLIDING_TOKEN_REFRESH_LIFETIME\": timedelta(days=2),\n\n \"TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainPairSerializer\",\n \"TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSerializer\",\n \"TOKEN_VERIFY_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenVerifySerializer\",\n \"TOKEN_BLACKLIST_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenBlacklistSerializer\",\n \"SLIDING_TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainSlidingSerializer\",\n \"SLIDING_TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSlidingSerializer\",\n}"}, "9abb628119998d065c28ad50ee33f3ce75c6b999": {"t": 1785768996.2413921, "n": 5757, "h": "63e34e3226650801", "c": "from dotenv import load_dotenv\nfrom pathlib import Path\nimport os\nfrom datetime import timedelta\n\n\nload_dotenv('.env')\n# Build paths inside the project like this: BASE_DIR / 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\nAUTH_USER_MODEL = \"registration.User\"\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = os.getenv('SECRET_KEY')\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\n\nALLOWED_HOSTS = [\"*\"]\n\n\n# Application definition\n\nINSTALLED_APPS = [\n 'django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n 'rest_framework',\n 'registration',\n 'user_profile',\n 'corsheaders',\n 'rest_framework_simplejwt',\n 'drf_yasg',\n]\n\nMIDDLEWARE = [\n 'django.middleware.security.SecurityMiddleware',\n 'django.contrib.sessions.middleware.SessionMiddleware',\n 'django.middleware.common.CommonMiddleware',\n 'django.middleware.csrf.CsrfViewMiddleware',\n 'django.contrib.auth.middleware.AuthenticationMiddleware',\n 'django.contrib.messages.middleware.MessageMiddleware',\n 'django.middleware.clickjacking.XFrameOptionsMiddleware',\n 'corsheaders.middleware.CorsMiddleware',\n]\n\nROOT_URLCONF = 'main.urls'\n\nCORS_ALLOWED_ORIGINS = [\n \"http://localhost:5173\",\n \"http://127.0.0.1:8000\",\n]\n\nTEMPLATES = [\n {\n 'BACKEND': 'django.template.backends.django.DjangoTemplates',\n 'DIRS': [],\n 'APP_DIRS': True,\n 'OPTIONS': {\n 'context_processors': [\n 'django.template.context_processors.debug',\n 'django.template.context_processors.request',\n 'django.contrib.auth.context_processors.auth',\n 'django.contrib.messages.context_processors.messages',\n ],\n },\n },\n]\n\nWSGI_APPLICATION = 'main.wsgi.application'\n\n\n# Database\n# https://docs.djangoproject.com/en/5.1/ref/settings/#databases\n\nDATABASES = {\n 'default': {\n 'ENGINE': 'django.db.backends.postgresql',\n 'NAME': os.getenv('DB_NAME'),\n 'USER': os.getenv('DB_USER'),\n 'PASSWORD': os.getenv('DB_PASSWORD'),\n 'HOST': os.getenv('DB_HOST'),\n 'PORT': os.getenv('DB_PORT'),\n }\n}\n\n# Password validation\n# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n {\n 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',\n },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/5.1/topics/i18n/\n\nLANGUAGE_CODE = 'en-us'\n\nTIME_ZONE = 'UTC'\n\nUSE_I18N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.1/howto/static-files/\n\nSTATIC_URL = '/static/'\nSTATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field\n\nDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'\n\n# Для тестирования (вывод писем в консоль)\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\n\n# Или для реальной отправки (настройте под ваш SMTP)\nEMAIL_HOST = os.getenv('EMAIL_HOST')\nEMAIL_PORT = os.getenv('EMAIL_PORT')\nEMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS')\nEMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')\nEMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')\nDEFAULT_FROM_EMAIL = EMAIL_HOST_USER\n\nREST_FRAMEWORK = {\n 'DEFAULT_AUTHENTICATION_CLASSES': (\n 'rest_framework_simplejwt.authentication.JWTAuthentication',\n ),\n 'DEFAULT_PERMISSION_CLASSES': (\n 'rest_framework.permissions.AllowAny',\n ),\n}\n\n\nSIMPLE_JWT = {\n \"ACCESS_TOKEN_LIFETIME\": timedelta(minutes=10),\n \"REFRESH_TOKEN_LIFETIME\": timedelta(days=2),\n \"ROTATE_REFRESH_TOKENS\": False,\n \"BLACKLIST_AFTER_ROTATION\": False,\n \"UPDATE_LAST_LOGIN\": False,\n\n \"ALGORITHM\": \"HS256\",\n \"SIGNING_KEY\": SECRET_KEY,\n \"VERIFYING_KEY\": \"\",\n \"AUDIENCE\": None,\n \"ISSUER\": None,\n \"JSON_ENCODER\": None,\n \"JWK_URL\": None,\n \"LEEWAY\": 0,\n\n \"AUTH_HEADER_TYPES\": (\"Bearer\",),\n \"AUTH_HEADER_NAME\": \"HTTP_AUTHORIZATION\",\n \"USER_ID_FIELD\": \"id\",\n \"USER_ID_CLAIM\": \"user_id\",\n \"USER_AUTHENTICATION_RULE\": \"rest_framework_simplejwt.authentication.default_user_authentication_rule\",\n\n \"AUTH_TOKEN_CLASSES\": (\"rest_framework_simplejwt.tokens.AccessToken\",),\n \"TOKEN_TYPE_CLAIM\": \"token_type\",\n \"TOKEN_USER_CLASS\": \"rest_framework_simplejwt.models.TokenUser\",\n\n \"JTI_CLAIM\": \"jti\",\n\n \"SLIDING_TOKEN_REFRESH_EXP_CLAIM\": \"refresh_exp\",\n \"SLIDING_TOKEN_LIFETIME\": timedelta(minutes=10),\n \"SLIDING_TOKEN_REFRESH_LIFETIME\": timedelta(days=2),\n\n \"TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainPairSerializer\",\n \"TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSerializer\",\n \"TOKEN_VERIFY_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenVerifySerializer\",\n \"TOKEN_BLACKLIST_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenBlacklistSerializer\",\n \"SLIDING_TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainSlidingSerializer\",\n \"SLIDING_TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSlidingSerializer\",\n}"}, "a20ce53b248e9e32320496ac8f2830209f183fb9": {"t": 1785768997.6500237, "n": 5737, "h": "51fc163a1c1d52b9", "c": "from dotenv import load_dotenv\nfrom pathlib import Path\nimport os\nfrom datetime import timedelta\n\n\nload_dotenv('.env')\n# Build paths inside the project like this: BASE_DIR / 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\nAUTH_USER_MODEL = \"registration.User\"\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = os.getenv('SECRET_KEY')\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\n\nALLOWED_HOSTS = [\"*\"]\n\n\n# Application definition\n\nINSTALLED_APPS = [\n 'django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n 'rest_framework',\n 'registration',\n 'corsheaders',\n 'rest_framework_simplejwt',\n 'drf_yasg',\n]\n\nMIDDLEWARE = [\n 'django.middleware.security.SecurityMiddleware',\n 'django.contrib.sessions.middleware.SessionMiddleware',\n 'django.middleware.common.CommonMiddleware',\n 'django.middleware.csrf.CsrfViewMiddleware',\n 'django.contrib.auth.middleware.AuthenticationMiddleware',\n 'django.contrib.messages.middleware.MessageMiddleware',\n 'django.middleware.clickjacking.XFrameOptionsMiddleware',\n 'corsheaders.middleware.CorsMiddleware',\n]\n\nROOT_URLCONF = 'main.urls'\n\nCORS_ALLOWED_ORIGINS = [\n \"http://localhost:5173\",\n \"http://127.0.0.1:8000\",\n]\n\nTEMPLATES = [\n {\n 'BACKEND': 'django.template.backends.django.DjangoTemplates',\n 'DIRS': [],\n 'APP_DIRS': True,\n 'OPTIONS': {\n 'context_processors': [\n 'django.template.context_processors.debug',\n 'django.template.context_processors.request',\n 'django.contrib.auth.context_processors.auth',\n 'django.contrib.messages.context_processors.messages',\n ],\n },\n },\n]\n\nWSGI_APPLICATION = 'main.wsgi.application'\n\n\n# Database\n# https://docs.djangoproject.com/en/5.1/ref/settings/#databases\n\nDATABASES = {\n 'default': {\n 'ENGINE': 'django.db.backends.postgresql',\n 'NAME': os.getenv('DB_NAME'),\n 'USER': os.getenv('DB_USER'),\n 'PASSWORD': os.getenv('DB_PASSWORD'),\n 'HOST': os.getenv('DB_HOST'),\n 'PORT': os.getenv('DB_PORT'),\n }\n}\n\n# Password validation\n# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n {\n 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',\n },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/5.1/topics/i18n/\n\nLANGUAGE_CODE = 'en-us'\n\nTIME_ZONE = 'UTC'\n\nUSE_I18N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.1/howto/static-files/\n\nSTATIC_URL = '/static/'\nSTATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field\n\nDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'\n\n# Для тестирования (вывод писем в консоль)\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\n\n# Или для реальной отправки (настройте под ваш SMTP)\nEMAIL_HOST = os.getenv('EMAIL_HOST')\nEMAIL_PORT = os.getenv('EMAIL_PORT')\nEMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS')\nEMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')\nEMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')\nDEFAULT_FROM_EMAIL = EMAIL_HOST_USER\n\nREST_FRAMEWORK = {\n 'DEFAULT_AUTHENTICATION_CLASSES': (\n 'rest_framework_simplejwt.authentication.JWTAuthentication',\n ),\n 'DEFAULT_PERMISSION_CLASSES': (\n 'rest_framework.permissions.AllowAny',\n ),\n}\n\n\nSIMPLE_JWT = {\n \"ACCESS_TOKEN_LIFETIME\": timedelta(minutes=10),\n \"REFRESH_TOKEN_LIFETIME\": timedelta(days=2),\n \"ROTATE_REFRESH_TOKENS\": False,\n \"BLACKLIST_AFTER_ROTATION\": False,\n \"UPDATE_LAST_LOGIN\": False,\n\n \"ALGORITHM\": \"HS256\",\n \"SIGNING_KEY\": SECRET_KEY,\n \"VERIFYING_KEY\": \"\",\n \"AUDIENCE\": None,\n \"ISSUER\": None,\n \"JSON_ENCODER\": None,\n \"JWK_URL\": None,\n \"LEEWAY\": 0,\n\n \"AUTH_HEADER_TYPES\": (\"Bearer\",),\n \"AUTH_HEADER_NAME\": \"HTTP_AUTHORIZATION\",\n \"USER_ID_FIELD\": \"id\",\n \"USER_ID_CLAIM\": \"user_id\",\n \"USER_AUTHENTICATION_RULE\": \"rest_framework_simplejwt.authentication.default_user_authentication_rule\",\n\n \"AUTH_TOKEN_CLASSES\": (\"rest_framework_simplejwt.tokens.AccessToken\",),\n \"TOKEN_TYPE_CLAIM\": \"token_type\",\n \"TOKEN_USER_CLASS\": \"rest_framework_simplejwt.models.TokenUser\",\n\n \"JTI_CLAIM\": \"jti\",\n\n \"SLIDING_TOKEN_REFRESH_EXP_CLAIM\": \"refresh_exp\",\n \"SLIDING_TOKEN_LIFETIME\": timedelta(minutes=10),\n \"SLIDING_TOKEN_REFRESH_LIFETIME\": timedelta(days=2),\n\n \"TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainPairSerializer\",\n \"TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSerializer\",\n \"TOKEN_VERIFY_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenVerifySerializer\",\n \"TOKEN_BLACKLIST_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenBlacklistSerializer\",\n \"SLIDING_TOKEN_OBTAIN_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenObtainSlidingSerializer\",\n \"SLIDING_TOKEN_REFRESH_SERIALIZER\": \"rest_framework_simplejwt.serializers.TokenRefreshSlidingSerializer\",\n}"}, "6ab0da5661e6eb4aa15146ce14c4696baae0485c": {"t": 1785768999.3419101, "n": 4646, "h": "aa7311f9dabb2aa8", "c": "from dotenv import load_dotenv\nfrom pathlib import Path\nimport os\nfrom datetime import timedelta\n\n\nload_dotenv('.env')\n# Build paths inside the project like this: BASE_DIR / 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\n\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = f\"{os.getenv('SECRET_KEY')}\"\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\n\nALLOWED_HOSTS = [\"*\"]\n\n\n# Application definition\n\nINSTALLED_APPS = [\n 'django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n 'rest_framework',\n 'registration',\n 'corsheaders',\n 'rest_framework_simplejwt',\n]\n\nMIDDLEWARE = [\n 'django.middleware.security.SecurityMiddleware',\n 'django.contrib.sessions.middleware.SessionMiddleware',\n 'django.middleware.common.CommonMiddleware',\n 'django.middleware.csrf.CsrfViewMiddleware',\n 'django.contrib.auth.middleware.AuthenticationMiddleware',\n 'django.contrib.messages.middleware.MessageMiddleware',\n 'django.middleware.clickjacking.XFrameOptionsMiddleware',\n 'corsheaders.middleware.CorsMiddleware',\n]\n\nROOT_URLCONF = 'main.urls'\n\nCORS_ALLOWED_ORIGINS = [\n \"http://localhost:5173\",\n]\n\nTEMPLATES = [\n {\n 'BACKEND': 'django.template.backends.django.DjangoTemplates',\n 'DIRS': [],\n 'APP_DIRS': True,\n 'OPTIONS': {\n 'context_processors': [\n 'django.template.context_processors.debug',\n 'django.template.context_processors.request',\n 'django.contrib.auth.context_processors.auth',\n 'django.contrib.messages.context_processors.messages',\n ],\n },\n },\n]\n\nWSGI_APPLICATION = 'main.wsgi.application'\n\n\n# Database\n# https://docs.djangoproject.com/en/5.1/ref/settings/#databases\n\nDATABASES = {\n 'default': {\n 'ENGINE': 'django.db.backends.postgresql',\n 'NAME': f\"{os.getenv('DB_NAME')}\",\n 'USER': f\"{os.getenv('DB_USER')}\",\n 'PASSWORD': f\"{os.getenv('DB_PASSWORD')}\",\n 'HOST': f\"{os.getenv('DB_HOST')}\",\n 'PORT': os.getenv('DB_PORT'),\n }\n}\n\n# Password validation\n# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n {\n 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',\n },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/5.1/topics/i18n/\n\nLANGUAGE_CODE = 'en-us'\n\nTIME_ZONE = 'UTC'\n\nUSE_I18N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.1/howto/static-files/\n\nSTATIC_URL = 'static/'\n\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field\n\nDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'\n\n# Для тестирования (вывод писем в консоль)\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\n\n# Или для реальной отправки (настройте под ваш SMTP)\nEMAIL_HOST = os.getenv('EMAIL_HOST')\nEMAIL_PORT = os.getenv('EMAIL_PORT')\nEMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS')\nEMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')\nEMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')\nDEFAULT_FROM_EMAIL = EMAIL_HOST_USER\n\nREST_FRAMEWORK = {\n 'DEFAULT_AUTHENTICATION_CLASSES': (\n 'rest_framework_simplejwt.authentication.JWTAuthentication',\n ),\n}\n\nSIMPLE_JWT = {\n 'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),\n 'REFRESH_TOKEN_LIFETIME': timedelta(days=1),\n 'ROTATE_REFRESH_TOKENS': False,\n 'BLACKLIST_AFTER_ROTATION': True,\n 'UPDATE_LAST_LOGIN': False,\n\n 'ALGORITHM': 'HS256',\n 'SIGNING_KEY': SECRET_KEY,\n 'VERIFYING_KEY': None,\n 'AUDIENCE': None,\n 'ISSUER': None,\n\n 'AUTH_HEADER_TYPES': ('Bearer',),\n 'USER_ID_FIELD': 'id',\n 'USER_ID_CLAIM': 'user_id',\n\n 'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),\n 'TOKEN_TYPE_CLAIM': 'token_type',\n\n 'JTI_CLAIM': 'jti',\n\n 'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp',\n 'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5),\n 'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1),\n}"}, "6ad820eb93e2e101fca6eba36c45b980dc6422a1": {"t": 1785769001.2554142, "n": 3691, "h": "a4a5931965c2843f", "c": "from dotenv import load_dotenv\nfrom pathlib import Path\nimport os\n\nload_dotenv('.env')\n# Build paths inside the project like this: BASE_DIR / 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\n\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = f\"{os.getenv('SECRET_KEY')}\"\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\n\nALLOWED_HOSTS = [\"*\"]\n\n\n# Application definition\n\nINSTALLED_APPS = [\n 'django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n 'rest_framework',\n 'registration',\n 'corsheaders',\n]\n\nMIDDLEWARE = [\n 'django.middleware.security.SecurityMiddleware',\n 'django.contrib.sessions.middleware.SessionMiddleware',\n 'django.middleware.common.CommonMiddleware',\n 'django.middleware.csrf.CsrfViewMiddleware',\n 'django.contrib.auth.middleware.AuthenticationMiddleware',\n 'django.contrib.messages.middleware.MessageMiddleware',\n 'django.middleware.clickjacking.XFrameOptionsMiddleware',\n 'corsheaders.middleware.CorsMiddleware',\n]\n\nROOT_URLCONF = 'main.urls'\n\nCORS_ALLOWED_ORIGINS = [\n \"http://localhost:5173\",\n]\n\nTEMPLATES = [\n {\n 'BACKEND': 'django.template.backends.django.DjangoTemplates',\n 'DIRS': [],\n 'APP_DIRS': True,\n 'OPTIONS': {\n 'context_processors': [\n 'django.template.context_processors.debug',\n 'django.template.context_processors.request',\n 'django.contrib.auth.context_processors.auth',\n 'django.contrib.messages.context_processors.messages',\n ],\n },\n },\n]\n\nWSGI_APPLICATION = 'main.wsgi.application'\n\n\n# Database\n# https://docs.djangoproject.com/en/5.1/ref/settings/#databases\n\nDATABASES = {\n 'default': {\n 'ENGINE': 'django.db.backends.postgresql',\n 'NAME': f\"{os.getenv('DB_NAME')}\",\n 'USER': f\"{os.getenv('DB_USER')}\",\n 'PASSWORD': f\"{os.getenv('DB_PASSWORD')}\",\n 'HOST': f\"{os.getenv('DB_HOST')}\",\n 'PORT': os.getenv('DB_PORT'),\n }\n}\n\n# Password validation\n# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n {\n 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',\n },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/5.1/topics/i18n/\n\nLANGUAGE_CODE = 'en-us'\n\nTIME_ZONE = 'UTC'\n\nUSE_I18N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.1/howto/static-files/\n\nSTATIC_URL = 'static/'\n\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field\n\nDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'\n\n# Для тестирования (вывод писем в консоль)\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\n\n# Или для реальной отправки (настройте под ваш SMTP)\nEMAIL_HOST = os.getenv('EMAIL_HOST')\nEMAIL_PORT = os.getenv('EMAIL_PORT')\nEMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS')\nEMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')\nEMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')\nDEFAULT_FROM_EMAIL = EMAIL_HOST_USER"}, "93ab39ec6b2eda6fa011fac2057158ebddc4c915": {"t": 1785769002.4858294, "n": 3570, "h": "747a2bc58e0042b9", "c": "from dotenv import load_dotenv\nfrom pathlib import Path\nimport os\n\nload_dotenv('.env')\n# Build paths inside the project like this: BASE_DIR / 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\n\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = f\"{os.getenv('SECRET_KEY')}\"\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\n\nALLOWED_HOSTS = [\"*\"]\n\n\n# Application definition\n\nINSTALLED_APPS = [\n 'django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n 'rest_framework',\n 'registration',\n]\n\nMIDDLEWARE = [\n 'django.middleware.security.SecurityMiddleware',\n 'django.contrib.sessions.middleware.SessionMiddleware',\n 'django.middleware.common.CommonMiddleware',\n 'django.middleware.csrf.CsrfViewMiddleware',\n 'django.contrib.auth.middleware.AuthenticationMiddleware',\n 'django.contrib.messages.middleware.MessageMiddleware',\n 'django.middleware.clickjacking.XFrameOptionsMiddleware',\n]\n\nROOT_URLCONF = 'main.urls'\n\nTEMPLATES = [\n {\n 'BACKEND': 'django.template.backends.django.DjangoTemplates',\n 'DIRS': [],\n 'APP_DIRS': True,\n 'OPTIONS': {\n 'context_processors': [\n 'django.template.context_processors.debug',\n 'django.template.context_processors.request',\n 'django.contrib.auth.context_processors.auth',\n 'django.contrib.messages.context_processors.messages',\n ],\n },\n },\n]\n\nWSGI_APPLICATION = 'main.wsgi.application'\n\n\n# Database\n# https://docs.djangoproject.com/en/5.1/ref/settings/#databases\n\nDATABASES = {\n 'default': {\n 'ENGINE': 'django.db.backends.postgresql',\n 'NAME': f\"{os.getenv('DB_NAME')}\",\n 'USER': f\"{os.getenv('DB_USER')}\",\n 'PASSWORD': f\"{os.getenv('DB_PASSWORD')}\",\n 'HOST': f\"{os.getenv('DB_HOST')}\",\n 'PORT': os.getenv('DB_PORT'),\n }\n}\n\n# Password validation\n# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n {\n 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',\n },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/5.1/topics/i18n/\n\nLANGUAGE_CODE = 'en-us'\n\nTIME_ZONE = 'UTC'\n\nUSE_I18N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.1/howto/static-files/\n\nSTATIC_URL = 'static/'\n\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field\n\nDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'\n\n# Для тестирования (вывод писем в консоль)\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\n\n# Или для реальной отправки (настройте под ваш SMTP)\nEMAIL_HOST = os.getenv('EMAIL_HOST')\nEMAIL_PORT = os.getenv('EMAIL_PORT')\nEMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS')\nEMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')\nEMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')\nDEFAULT_FROM_EMAIL = EMAIL_HOST_USER"}, "95942be1784edfe2321d31a4df10eab863f2eea8": {"t": 1785769004.7441785, "n": 3215, "h": "d1dfc92747b8aec8", "c": "\"\"\"\nDjango settings for main project.\n\nGenerated by 'django-admin startproject' using Django 5.1.6.\n\nFor more information on this file, see\nhttps://docs.djangoproject.com/en/5.1/topics/settings/\n\nFor the full list of settings and their values, see\nhttps://docs.djangoproject.com/en/5.1/ref/settings/\n\"\"\"\n\nfrom pathlib import Path\n\n# Build paths inside the project like this: BASE_DIR / 'subdir'.\nBASE_DIR = Path(__file__).resolve().parent.parent\n\n\n# Quick-start development settings - unsuitable for production\n# See https://docs.djangoproject.com/en/5.1/howto/deployment/checklist/\n\n# SECURITY WARNING: keep the secret key used in production secret!\nSECRET_KEY = 'django-insecure-3-f2ph^!iche$#e4nq(t!lpu_j^=o24j2vn$d-w-4zu-!((ell'\n\n# SECURITY WARNING: don't run with debug turned on in production!\nDEBUG = True\n\nALLOWED_HOSTS = []\n\n\n# Application definition\n\nINSTALLED_APPS = [\n 'django.contrib.admin',\n 'django.contrib.auth',\n 'django.contrib.contenttypes',\n 'django.contrib.sessions',\n 'django.contrib.messages',\n 'django.contrib.staticfiles',\n]\n\nMIDDLEWARE = [\n 'django.middleware.security.SecurityMiddleware',\n 'django.contrib.sessions.middleware.SessionMiddleware',\n 'django.middleware.common.CommonMiddleware',\n 'django.middleware.csrf.CsrfViewMiddleware',\n 'django.contrib.auth.middleware.AuthenticationMiddleware',\n 'django.contrib.messages.middleware.MessageMiddleware',\n 'django.middleware.clickjacking.XFrameOptionsMiddleware',\n]\n\nROOT_URLCONF = 'main.urls'\n\nTEMPLATES = [\n {\n 'BACKEND': 'django.template.backends.django.DjangoTemplates',\n 'DIRS': [],\n 'APP_DIRS': True,\n 'OPTIONS': {\n 'context_processors': [\n 'django.template.context_processors.debug',\n 'django.template.context_processors.request',\n 'django.contrib.auth.context_processors.auth',\n 'django.contrib.messages.context_processors.messages',\n ],\n },\n },\n]\n\nWSGI_APPLICATION = 'main.wsgi.application'\n\n\n# Database\n# https://docs.djangoproject.com/en/5.1/ref/settings/#databases\n\nDATABASES = {\n 'default': {\n 'ENGINE': 'django.db.backends.sqlite3',\n 'NAME': BASE_DIR / 'db.sqlite3',\n }\n}\n\n\n# Password validation\n# https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators\n\nAUTH_PASSWORD_VALIDATORS = [\n {\n 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',\n },\n {\n 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',\n },\n]\n\n\n# Internationalization\n# https://docs.djangoproject.com/en/5.1/topics/i18n/\n\nLANGUAGE_CODE = 'en-us'\n\nTIME_ZONE = 'UTC'\n\nUSE_I18N = True\n\nUSE_TZ = True\n\n\n# Static files (CSS, JavaScript, Images)\n# https://docs.djangoproject.com/en/5.1/howto/static-files/\n\nSTATIC_URL = 'static/'\n\n# Default primary key field type\n# https://docs.djangoproject.com/en/5.1/ref/settings/#default-auto-field\n\nDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'\n"}}}} |