/
7Vladis
/
manual_devices
Обзор
Документация
Войти
/
7Vladis
/
manual_devices
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
core/settings.py
239 строк
7 KB
7vladis
bug fix
29 июл 2026, 10:58
29 июл 2026, 10:58
998399f
Код
Авторство
О чём код?
""" Django settings for core project. Generated by 'django-admin startproject' using Django 6.0.6. """ from pathlib import Path from dotenv import load_dotenv import os BASE_DIR = Path(__file__).resolve().parent.parent load_dotenv(BASE_DIR / '.env') SECRET_KEY = os.getenv('SECRET_KEY', 'jango-insecure-default-key') DEBUG = os.getenv('DEBUG', 'True') == 'True' ALLOWED_HOSTS = [host.strip() for host in os.getenv('ALLOWED_HOSTS', '*').split(',')] LOGIN_URL = 'login' LOGIN_REDIRECT_URL = 'dashboard' LOGOUT_REDIRECT_URL = 'login' AUTH_USER_MODEL = 'users.User' SESSION_COOKIE_AGE = 1209600 # Динамическая настройка LDAP (если USE_LDAP=True в .env) USE_LDAP = os.getenv('USE_LDAP', 'False') == 'True' AUTHENTICATION_BACKENDS = [ "django.contrib.auth.backends.ModelBackend", ] if USE_LDAP: try: import ldap from django_auth_ldap.config import LDAPSearch, GroupOfNamesType ldap_ca_file = os.getenv('AUTH_LDAP_CA_FILE') if ldap_ca_file and os.path.exists(ldap_ca_file): ldap.set_option(ldap.OPT_X_TLS_CACERTFILE, ldap_ca_file) ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_DEMAND) ldap.set_option(ldap.OPT_X_TLS_NEWCTX, 0) AUTHENTICATION_BACKENDS.insert(0, "django_auth_ldap.backend.LDAPBackend") AUTH_LDAP_SERVER_URI = os.getenv('AUTH_LDAP_SERVER_URI', 'ldap://your.domain.ru') AUTH_LDAP_START_TLS = True AUTH_LDAP_BIND_DN = os.getenv('AUTH_LDAP_BIND_DN', '') AUTH_LDAP_BIND_PASSWORD = os.getenv('AUTH_LDAP_BIND_PASSWORD', '') user_search_dn = os.getenv('AUTH_LDAP_USER_SEARCH_DN', 'cn=users,cn=accounts,dc=your,dc=domain,dc=ru') AUTH_LDAP_USER_SEARCH = LDAPSearch(user_search_dn, ldap.SCOPE_SUBTREE, "(uid=%(user)s)") AUTH_LDAP_USER_QUERY_FIELD = 'email' group_search_dn = os.getenv('AUTH_LDAP_GROUP_SEARCH_DN', 'cn=groups,cn=accounts,dc=your,dc=domain,dc=ru') AUTH_LDAP_GROUP_SEARCH = LDAPSearch(group_search_dn, ldap.SCOPE_SUBTREE, "(objectClass=groupOfNames)") AUTH_LDAP_GROUP_TYPE = GroupOfNamesType(name_attr="cn") AUTH_LDAP_REQUIRE_GROUP = os.getenv('AUTH_LDAP_REQUIRE_GROUP', '') AUTH_LDAP_USER_ATTR_MAP = { "first_name": "givenName", "last_name": "sn", "email": "mail", "username": "mail", } AUTH_LDAP_ALWAYS_UPDATE_USER = False AUTH_LDAP_NO_NEW_USERS = False except ImportError: pass INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django_apscheduler', 'users', 'data', 'notifications', ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'core.middleware.ValidateUserActiveMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ROOT_URLCONF = 'core.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR / 'templates'], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] WSGI_APPLICATION = 'core.wsgi.application' DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': os.getenv('DB_NAME', 'my_project_db'), 'USER': os.getenv('DB_USER', 'my_user'), 'PASSWORD': os.getenv('DB_PASSWORD', 'my_password'), 'HOST': os.getenv('DB_HOST', 'localhost'), 'PORT': os.getenv('DB_PORT', '5432'), } } AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', }, { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ] LANGUAGE_CODE = 'ru-ru' TIME_ZONE = 'Asia/Yekaterinburg' USE_I18N = True USE_TZ = True STATIC_URL = 'static/' STATICFILES_DIRS = [BASE_DIR / 'static'] STATIC_ROOT = BASE_DIR / 'staticfiles' MEDIA_URL = 'media/' MEDIA_ROOT = BASE_DIR / 'media' DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' LOGS_DIR = BASE_DIR / 'logs' LOGS_DIR.mkdir(parents=True, exist_ok=True) LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'verbose': { 'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}', 'style': '{', }, 'simple': { 'format': '{levelname} {asctime} {message}', 'style': '{', }, }, 'filters': { 'require_debug_true': { '()': 'django.utils.log.RequireDebugTrue', }, }, 'handlers': { 'console': { 'level': 'INFO', 'filters': ['require_debug_true'], 'class': 'logging.StreamHandler', 'formatter': 'simple', }, 'file_django': { 'level': 'WARNING', 'class': 'logging.handlers.RotatingFileHandler', 'filename': LOGS_DIR / 'django.log', 'maxBytes': 1024 * 1024 * 10, 'backupCount': 5, 'formatter': 'verbose', }, 'file_app': { 'level': 'INFO', 'class': 'logging.handlers.RotatingFileHandler', 'filename': LOGS_DIR / 'app.log', 'maxBytes': 1024 * 1024 * 5, 'backupCount': 5, 'formatter': 'verbose', }, }, 'loggers': { 'django': { 'handlers': ['console', 'file_django'], 'level': 'INFO', 'propagate': True, }, 'django.request': { 'handlers': ['file_django'], 'level': 'ERROR', 'propagate': False, }, 'users': { 'handlers': ['console', 'file_app'], 'level': 'INFO', 'propagate': False, }, 'data': { 'handlers': ['console', 'file_app'], 'level': 'INFO', 'propagate': False, }, 'notifications': { 'handlers': ['console', 'file_app'], 'level': 'INFO', 'propagate': False, }, 'django_auth_ldap': { 'handlers': ['console', 'file_app'], 'level': 'INFO', 'propagate': False, }, }, }