mod: switch secrets config to .env

This commit is contained in:
2026-04-17 15:18:05 +03:00
parent bcc10de4d4
commit d5719015b0
5 changed files with 105 additions and 284 deletions

View File

@@ -1,5 +1,6 @@
# Django Configuration Example # Django Configuration Example
# Копируйте этот файл в .env.local и заполните реальные значения # Все настройки читаются из переменных окружения (DEV/PROD без распознавания хоста)
# Для локальной разработки можно скопировать файл в .env.local и экспортировать его.
# ============================================================================ # ============================================================================
# DJANGO # DJANGO
@@ -15,19 +16,29 @@ DEBUG=False
# Допустимые хосты (разделены запятой без пробелов) # Допустимые хосты (разделены запятой без пробелов)
ALLOWED_HOSTS=localhost,127.0.0.1,yourdomain.com ALLOWED_HOSTS=localhost,127.0.0.1,yourdomain.com
# Админы для email-оповещений Django (формат: Имя:email,Имя2:email2)
ADMINS=Admin:admin@example.com
# ============================================================================ # ============================================================================
# DATABASE # DATABASE
# ============================================================================ # ============================================================================
# Database backend (по умолчанию mysql) # Database backend (по умолчанию SQLite)
DATABASE_ENGINE=django.db.backends.mysql DATABASE_ENGINE=django.db.backends.sqlite3
# Database connection # Имя/путь базы данных:
DATABASE_HOST=localhost # - для SQLite: только имя файла (полный путь соберется в settings.py через PROJECT_ROOT/database)
DATABASE_PORT=3306 # - для MySQL/MariaDB: имя базы
DATABASE_NAME=django_oknardia DATABASE_NAME=oknadria.sqlite3
DATABASE_USER=web
DATABASE_PASSWORD=your-db-password-here # Для MySQL/MariaDB (используются, если DATABASE_ENGINE=django.db.backends.mysql)
# DATABASE_HOST=localhost
# DATABASE_PORT=3306
# DATABASE_USER=name-for-db-user
# DATABASE_PASSWORD=your-db-password-here
# Пути вычисляются автоматически внутри settings.py от PROJECT_ROOT
TOUCH_RELOAD=/app/logs/touch-reload.txt
# ============================================================================ # ============================================================================
# EMAIL # EMAIL
@@ -40,6 +51,7 @@ EMAIL_BACKEND=django.core.mail.backends.smtp.EmailBackend
EMAIL_HOST=smtp.example.com EMAIL_HOST=smtp.example.com
EMAIL_PORT=587 EMAIL_PORT=587
EMAIL_USE_TLS=True EMAIL_USE_TLS=True
EMAIL_USE_SSL=False
EMAIL_HOST_USER=your-email@example.com EMAIL_HOST_USER=your-email@example.com
EMAIL_HOST_PASSWORD=your-email-password EMAIL_HOST_PASSWORD=your-email-password
@@ -100,7 +112,7 @@ LOG_LEVEL=INFO
# ============================================================================ # ============================================================================
# 1. Скопируйте этот файл: # 1. Скопируйте этот файл:
# cp .env.example .env.local # cp .env.sample .env.local
# #
# 2. Отредактируйте значения в .env.local: # 2. Отредактируйте значения в .env.local:
# nano .env.local # nano .env.local
@@ -108,9 +120,8 @@ LOG_LEVEL=INFO
# 3. Убедитесь, что .env.local в .gitignore: # 3. Убедитесь, что .env.local в .gitignore:
# grep ".env" .gitignore # grep ".env" .gitignore
# #
# 4. Используйте python-dotenv для загрузки переменных в settings.py: # 4. Экспортируйте переменные перед запуском Django:
# from dotenv import load_dotenv # set -a; source .env.local; set +a
# load_dotenv()
# #
# ВАЖНО: # ВАЖНО:
# - НИКОГДА не коммитьте .env.local или файлы с реальными значениями в git! # - НИКОГДА не коммитьте .env.local или файлы с реальными значениями в git!

View File

@@ -1,185 +0,0 @@
# -*- coding: utf-8 -*-
"""
ШАБЛОН для my_secret.py
ИНСТРУКЦИЯ: скопируйте этот файл в my_secret.py и заполните реальные значения.
Пример:
cp oknardia/oknardia/my_secret__sample.py oknardia/oknardia/my_secret.py
# затем отредактируйте значения в my_secret.py
ВАЖНО: my_secret.py НИКОГДА не должен быть в git!
Используйте .gitignore для исключения файла.
"""
# ============================================================================
# РАЗРАБОТКА (DEV) - Хосты и сетевые настройки
# ============================================================================
# Хосты на которых может работать приложение (разработка)
MY_ALLOWED_HOSTS = [
'127.0.0.1',
'localhost',
'your-dev-hostname.local', # ИЗМЕНИТЕ на ваше имя хоста
]
# Допустимые хосты для разработки
MY_HOST_HOME1 = 'your-dev-hostname-windows' # ИЗМЕНИТЕ
MY_HOST_HOME2 = 'your-dev-hostname-mac' # ИЗМЕНИТЕ
MY_HOST_DEV = [MY_HOST_HOME1, MY_HOST_HOME2]
# Хосты для продакшена (заполнять с осторожностью)
MY_HOST_PROD = [] # На продакшене используйте переменные окружения!
# ============================================================================
# БЕЗОПАСНОСТЬ - Django SECRET_KEY
# ============================================================================
# SECURITY WARNING: keep the secret key used in production secret!
# Сгенерируйте новый ключ с помощью:
# python -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'
MY_SECRET_KEY = 'ЗАПОЛНИТЕ_СЛУЧАЙНОЙ_СТРОКОЙ_БОЛЬШОЙ_ДЛИНЫ'
# ============================================================================
# АДМИНИСТРАТОРЫ - для оповещений об ошибках
# ============================================================================
MY_ADMINS = (
('Your Name', 'your-email@example.com'),
('Admin Name', 'admin@example.com'),
)
# ============================================================================
# ПУТИ К ФАЙЛАМ - разработка
# ============================================================================
# путь к каталогу media (статика, для web-сервера nginx или apache)
MY_MEDIA_ROOT_DEV1 = 'M:\\path\\to\\your\\media\\' # Windows (если применимо)
MY_MEDIA_ROOT_DEV2 = '/path/to/your/media/' # Mac/Linux - ИЗМЕНИТЕ!
# путь к каталогу static (статика, для web-сервера nginx или apache)
MY_STATIC_ROOT_DEV1 = 'M:\\path\\to\\your\\static' # Windows (если применимо)
MY_STATIC_ROOT_DEV2 = '/path/to/your/static' # Mac/Linux - ИЗМЕНИТЕ!
# путь для кэш-блоков шаблонов
MY_STATIC_BASE_PATH_DEV1 = MY_STATIC_ROOT_DEV1
MY_STATIC_BASE_PATH_DEV2 = MY_STATIC_ROOT_DEV2
# путь для sitemap файлов
MY_SITEMAP_ROOT_DEV1 = 'M:\\path\\to\\your\\public\\' # Windows (если применимо)
MY_SITEMAP_ROOT_DEV2 = '/path/to/your/public/' # Mac/Linux - ИЗМЕНИТЕ!
# ============================================================================
# ПУТИ К ФАЙЛАМ - продакшен
# ============================================================================
MY_MEDIA_ROOT_PROD = '/home/web/oknardia-ru/public/media/' # ЗАПОЛНИТЕ!
MY_STATIC_ROOT_PROD = '/home/web/oknardia-ru/public/static' # ЗАПОЛНИТЕ!
MY_STATIC_BASE_PATH_PROD = MY_STATIC_ROOT_PROD
MY_SITEMAP_ROOT_PROD = '/home/web/oknardia-ru/public/' # ЗАПОЛНИТЕ!
# ============================================================================
# EMAIL - Почтовый сервер (разработка)
# ============================================================================
# Email адреса для разработки
MY_EMAIL_DEV = 'dev-email@example.com'
MY_EMAIL_FROM_DEV = 'dev-email@example.com'
MY_EMAIL_HOST_USER_DEV = 'your-email@smtp.example.com' # ЗАПОЛНИТЕ!
MY_EMAIL_HOST_PASSWORD_DEV = 'YOUR_EMAIL_PASSWORD' # ЗАПОЛНИТЕ!
MY_EMAIL_HOST_DEV = 'smtp.example.com' # ЗАПОЛНИТЕ! (например: smtp.mail.ru)
MY_EMAIL_PORT_DEV = 587 # ЗАПОЛНИТЕ! (обычно 587 или 2525)
# ============================================================================
# EMAIL - Почтовый сервер (продакшен)
# ============================================================================
MY_EMAIL_PROD = MY_EMAIL_DEV
MY_EMAIL_FROM_PROD = MY_EMAIL_FROM_DEV
MY_EMAIL_HOST_USER_PROD = MY_EMAIL_HOST_USER_DEV # На продакшене используйте env переменные!
MY_EMAIL_HOST_PASSWORD_PROD = MY_EMAIL_HOST_PASSWORD_DEV # На продакшене используйте env переменные!
MY_EMAIL_HOST_PROD = MY_EMAIL_HOST_DEV
MY_EMAIL_PORT_PROD = MY_EMAIL_PORT_DEV
# ============================================================================
# БД MySQL/MariaDB - разработка
# ============================================================================
MY_DATABASE_HOST_DEV1 = 'localhost' # Офисный сервер разработки - ИЗМЕНИТЕ!
MY_DATABASE_HOST_DEV2 = 'localhost' # Домашний сервер разработки - ИЗМЕНИТЕ!
MY_DATABASE_NAME_DEV = 'django_oknardia_dev' # ИЗМЕНИТЕ если нужно
MY_DATABASE_PORT_DEV = '3306' # Стандартный порт MySQL
MY_DATABASE_USER_DEV = 'web' # ИЗМЕНИТЕ если нужно
MY_DATABASE_PASSWORD_DEV = 'YOUR_DB_PASSWORD' # ЗАПОЛНИТЕ!
# ============================================================================
# БД MySQL/MariaDB - продакшен
# ============================================================================
MY_DATABASE_HOST_PROD = 'localhost' # ЗАПОЛНИТЕ! (на продакшене)
MY_DATABASE_NAME_PROD = 'django_oknardia_prod' # ЗАПОЛНИТЕ!
MY_DATABASE_PORT_PROD = '3306'
MY_DATABASE_USER_PROD = 'web'
# ВНИМАНИЕ: На продакшене используйте переменные окружения или менеджер секретов!
MY_DATABASE_PASSWORD_PROD = '' # ОСТАВЬТЕ ПУСТО! Используйте переменные окружения!
# ============================================================================
# API ключи - Google Captcha
# ============================================================================
# Получите ключи на https://www.google.com/recaptcha/admin
# ВАЖНО: Никогда не коммитьте реальные ключи в git!
# PRIVATE ключ - это СЕКРЕТ, держите его в безопасности!
MY_CAPTCHA_PUBLIC_KEY = 'YOUR_CAPTCHA_PUBLIC_KEY_HERE' # ЗАПОЛНИТЕ!
MY_CAPTCHA_PRIVATE_KEY = 'YOUR_CAPTCHA_PRIVATE_KEY_HERE' # ЗАПОЛНИТЕ! (СЕКРЕТ!)
# ============================================================================
# API ключи - Yandex Maps
# ============================================================================
# Получите ключ на https://developer.tech.yandex.ru/
MY_YANDEX_MAPS_API_KEY = 'YOUR_YANDEX_MAPS_API_KEY'
# ============================================================================
# uWSGI - Touch-reload файл (для перезагрузки при изменении кода)
# ============================================================================
MY_TOUCH_RELOAD_DEV1 = 'M:\\path\\to\\touch-reload.txt' # Windows (если применимо)
MY_TOUCH_RELOAD_DEV2 = '/path/to/logs/touch-reload.txt' # Mac/Linux - ИЗМЕНИТЕ!
MY_TOUCH_RELOAD_PROD = '/home/web/oknardia-ru/logs/touch-reload.txt' # ЗАПОЛНИТЕ!
# ============================================================================
# ИНСТРУКЦИЯ ПО ЗАПОЛНЕНИЮ
# ============================================================================
"""
1. СКОПИРУЙТЕ этот файл:
cp oknardia/oknardia/my_secret.py.template oknardia/oknardia/my_secret.py
2. ОТРЕДАКТИРУЙТЕ значения, помеченные ИЗМЕНИТЕ! или ЗАПОЛНИТЕ!
3. УБЕДИТЕСЬ, что мой_secret.py в .gitignore:
grep my_secret .gitignore
4. НИКОГДА не коммитьте my_secret.py в git!
5. На ПРОДАКШЕНЕ используйте переменные окружения:
export DJANGO_SECRET_KEY="..."
export DATABASE_PASSWORD="..."
и т.д.
СОВЕТЫ:
- Сгенерируйте новый SECRET_KEY с помощью Python:
python -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'
- Используйте менеджер паролей (LastPass, 1Password, Vault) для хранения учетных данных
- Регулярно меняйте пароли БД и API ключи
- На продакшене используйте отдельные более сильные пароли
"""

View File

@@ -11,42 +11,50 @@ For the full list of settings and their values, see
https://docs.djangoproject.com/en/4.1/ref/settings/ https://docs.djangoproject.com/en/4.1/ref/settings/
""" """
import os
from pathlib import Path from pathlib import Path
from oknardia.my_secret import * import environ
import socket
def _env_admins(raw_items: list[str]) -> tuple[tuple[str, str], ...]:
# Формат: "Имя1:email1,Имя2:email2"
admins: list[tuple[str, str]] = []
for item in raw_items:
if ":" not in item:
continue
admin_name, admin_email = item.split(":", maxsplit=1)
admin_name = admin_name.strip()
admin_email = admin_email.strip()
if admin_name and admin_email:
admins.append((admin_name, admin_email))
return tuple(admins)
# Build paths inside the project like this: BASE_DIR / 'subdir'. # Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent BASE_DIR = Path(__file__).resolve().parent.parent
# Переключатель БД для DEV: по умолчанию используем SQLite.
# Чтобы вернуть MariaDB на DEV, установите OKNARDIA_USE_SQLITE_DEV=0
USE_SQLITE_DEV = os.getenv("OKNARDIA_USE_SQLITE_DEV", "1").strip().lower() in {
"1", "true", "yes", "on"
}
PROJECT_ROOT = BASE_DIR.parent PROJECT_ROOT = BASE_DIR.parent
SQLITE_DB_PATH = PROJECT_ROOT / 'database' / 'oknadria.sqlite3' PUBLIC_ROOT = PROJECT_ROOT / 'public'
STATIC_SOURCE_ROOT = PUBLIC_ROOT / 'static'
env = environ.Env()
environ.Env.read_env(str(PROJECT_ROOT / '.env'))
# Quick-start development settings - unsuitable for production # Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/ # See https://docs.djangoproject.com/en/4.1/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret! # SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-pd&1$j6z*1w#(j*16b+(@@#&2)+@x^^ot4)zqt-e67*1+$^qch' SECRET_KEY = env(
'DJANGO_SECRET_KEY',
default='django-insecure-pd&1$j6z*1w#(j*16b+(@@#&2)+@x^^ot4)zqt-e67*1+$^qch',
)
# SECURITY WARNING: don't run with debug turned on in production! # SECURITY WARNING: don't run with debug turned on in production!
# ПРЕДУПРЕЖДЕНИЕ БЕЗОПАСНОСТИ: не работайте в режиме DEBUG в продашене! # ПРЕДУПРЕЖДЕНИЕ БЕЗОПАСНОСТИ: не работайте в режиме DEBUG в продашене!
if socket.gethostname() in MY_HOST_DEV: DEBUG = TEMPLATE_DEBUG = env.bool('DEBUG', default=False)
DEBUG = TEMPLATE_DEBUG = True
else:
# Все остальные хосты (подразумевается продакшн)
# DEBUG = TEMPLATE_DEBUG = True
DEBUG = TEMPLATE_DEBUG = False
ALLOWED_HOSTS = MY_ALLOWED_HOSTS ALLOWED_HOSTS = env.list('ALLOWED_HOSTS', default=['127.0.0.1', 'localhost'])
# Настройки сообщений об ошибках когда все упало и т.п. # Настройки сообщений об ошибках когда все упало и т.п.
ADMINS = MY_ADMINS ADMINS = _env_admins(env.list('ADMINS', default=[]))
# Application definition # Application definition
@@ -124,83 +132,68 @@ DATETIME_FORMAT = 'Y-m-d H:i:s'
# Статические файлы (CSS, JavaScript, Images) # Статические файлы (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.1/howto/static-files/ # https://docs.djangoproject.com/en/4.1/howto/static-files/
STATIC_URL = 'static/' STATIC_URL = '/static/'
MEDIA_URL = 'media/' MEDIA_URL = '/media/'
if socket.gethostname() in MY_HOST_DEV: # DEBUG: заменяем настройки прода, на настройки девопа MEDIA_ROOT = str(PUBLIC_ROOT / 'media')
MEDIA_ROOT = MY_MEDIA_ROOT_DEV1 if socket.gethostname() == MY_HOST_HOME1 else MY_MEDIA_ROOT_DEV2 # STATIC_ROOT отделен от исходной статики, чтобы избежать staticfiles.E002.
SITEMAP_ROOT = MY_SITEMAP_ROOT_DEV1 if socket.gethostname() == MY_HOST_HOME1 else MY_SITEMAP_ROOT_DEV2 STATIC_ROOT = str(PUBLIC_ROOT / 'static_collected')
# STATIC_ROOT = MY_STATIC_ROOT_DEV1 if socket.gethostname() == MY_HOST_HOME1 else MY_STATIC_ROOT_DEV2 SITEMAP_ROOT = str(PUBLIC_ROOT)
dev_static_from_secret = MY_STATIC_ROOT_DEV1 if socket.gethostname() == MY_HOST_HOME1 else MY_STATIC_ROOT_DEV2
# Если путь из секрета устарел, используем путь текущего репозитория. # Каталоги, откуда Django читает исходную статику в DEBUG-режиме.
dev_static_fallback = PROJECT_ROOT / 'public' / 'static' STATICFILES_DIRS = [
dev_static_path = dev_static_from_secret if os.path.isdir(dev_static_from_secret) else str(dev_static_fallback) str(STATIC_SOURCE_ROOT)
STATICFILES_DIRS = [dev_static_path] ] if STATIC_SOURCE_ROOT.is_dir() else []
# путь к каталогу static (в эту переменную использовать для указания пути где будут делаться кэш-блоки для шаблонов)
dev_static_base_from_secret = MY_STATIC_BASE_PATH_DEV1 if socket.gethostname() == MY_HOST_HOME1 else MY_STATIC_BASE_PATH_DEV2 # Путь к каталогу static для генерации кэш-файлов и служебных JS.
STATIC_BASE_PATH = dev_static_base_from_secret if os.path.isdir(dev_static_base_from_secret) else str(dev_static_fallback) STATIC_BASE_PATH = str(STATIC_SOURCE_ROOT)
if USE_SQLITE_DEV:
database_engine = env('DATABASE_ENGINE', default='django.db.backends.sqlite3')
if database_engine == 'django.db.backends.sqlite3':
# Для SQLite принимаем только имя файла из env и кладем БД в PROJECT_ROOT/database.
sqlite_db_filename = Path(env('DATABASE_NAME', default='oknadria.sqlite3')).name
sqlite_db_path = PROJECT_ROOT / 'database' / sqlite_db_filename
DATABASES = { DATABASES = {
'default': { 'default': {
'ENGINE': 'django.db.backends.sqlite3', 'ENGINE': 'django.db.backends.sqlite3',
'NAME': SQLITE_DB_PATH, 'NAME': str(sqlite_db_path),
} }
} }
else: else:
DATABASES = { DATABASES = {
'default': { 'default': {
'ENGINE': "django.db.backends.mysql", 'ENGINE': database_engine,
'HOST': MY_DATABASE_HOST_DEV1 if socket.gethostname() == MY_HOST_HOME1 else MY_DATABASE_HOST_DEV2, 'HOST': env('DATABASE_HOST', default='localhost'),
'PORT': MY_DATABASE_PORT_DEV, # Set to "" for default. Not used with sqlite3. 'PORT': env('DATABASE_PORT', default='3306'),
'NAME': MY_DATABASE_NAME_DEV, # Not used with sqlite3. 'NAME': env('DATABASE_NAME', default=''),
'USER': MY_DATABASE_USER_DEV, # Not used with sqlite3. 'USER': env('DATABASE_USER', default=''),
'PASSWORD': MY_DATABASE_PASSWORD_DEV, # Not used with sqlite3. 'PASSWORD': env('DATABASE_PASSWORD', default=''),
# 'OPTIONS': { 'autocommit': True, }
} }
} }
TOUCH_RELOAD = MY_TOUCH_RELOAD_DEV1 if socket.gethostname() == MY_HOST_HOME1 else MY_TOUCH_RELOAD_DEV2
else:
MEDIA_ROOT = MY_MEDIA_ROOT_PROD
# STATICFILES_DIRS = [MY_STATIC_ROOT_PROD1, ]
STATIC_ROOT = MY_STATIC_ROOT_PROD
SITEMAP_ROOT = MY_SITEMAP_ROOT_PROD
# путь к каталогу static (в эту переменную использовать для указания пути где будут делаться кэш-блоки для шаблонов)
STATIC_BASE_PATH = MY_STATIC_BASE_PATH_PROD
DATABASES = {
'default': {
'ENGINE': "django.db.backends.mysql",
'HOST': MY_DATABASE_HOST_PROD, # Set to "" for localhost. Not used with sqlite3.
'PORT': MY_DATABASE_PORT_PROD, # Set to "" for default. Not used with sqlite3.
'NAME': MY_DATABASE_NAME_PROD, # Not used with sqlite3.
'USER': MY_DATABASE_USER_PROD, # Not used with sqlite3.
'PASSWORD': MY_DATABASE_PASSWORD_PROD, # Not used with sqlite3.
# 'OPTIONS': { 'autocommit': True, }
}
}
TOUCH_RELOAD = MY_TOUCH_RELOAD_PROD
# Для локальной/тестовой разработки можно принудительно включить SQLite даже TOUCH_RELOAD = env('TOUCH_RELOAD', default='')
# если hostname не попал в MY_HOST_DEV. На прод-хостах (MY_HOST_PROD) override
# не применяется.
if USE_SQLITE_DEV and socket.gethostname() not in MY_HOST_PROD:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': SQLITE_DB_PATH,
}
}
######################################### #########################################
# настройки для почтового сервера (они одинаковые для DEV и PROD) # настройки для почтового сервера (они одинаковые для DEV и PROD)
EMAIL_HOST = MY_EMAIL_HOST_DEV EMAIL_BACKEND = env(
EMAIL_PORT = MY_EMAIL_PORT_DEV 'EMAIL_BACKEND',
EMAIL_HOST_USER = MY_EMAIL_HOST_USER_DEV default='django.core.mail.backends.smtp.EmailBackend',
EMAIL_HOST_PASSWORD = MY_EMAIL_HOST_PASSWORD_DEV )
SERVER_EMAIL = DEFAULT_FROM_EMAIL = EMAIL_HOST_USER EMAIL_HOST = env('EMAIL_HOST', default='localhost')
EMAIL_USE_TLS = True EMAIL_PORT = env.int('EMAIL_PORT', default=25)
EMAIL_HOST_USER = env('EMAIL_HOST_USER', default='')
EMAIL_HOST_PASSWORD = env('EMAIL_HOST_PASSWORD', default='')
EMAIL_USE_TLS = env.bool('EMAIL_USE_TLS', default=True)
EMAIL_USE_SSL = env.bool('EMAIL_USE_SSL', default=False)
DEFAULT_FROM_EMAIL = env('DEFAULT_FROM_EMAIL', default=EMAIL_HOST_USER)
SERVER_EMAIL = env('SERVER_EMAIL', default=DEFAULT_FROM_EMAIL)
EMAIL_SUBJECT_PREFIX = 'OKNARDIA ERR: ' # префикс для оповещений об ошибках и необработанных исключениях EMAIL_SUBJECT_PREFIX = 'OKNARDIA ERR: ' # префикс для оповещений об ошибках и необработанных исключениях
SECURE_SSL_REDIRECT = env.bool('SECURE_SSL_REDIRECT', default=False)
SESSION_COOKIE_SECURE = env.bool('SESSION_COOKIE_SECURE', default=False)
CSRF_COOKIE_SECURE = env.bool('CSRF_COOKIE_SECURE', default=False)
# Default primary key field type # Default primary key field type
# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field # https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field
@@ -208,8 +201,8 @@ EMAIL_SUBJECT_PREFIX = 'OKNARDIA ERR: ' # префикс для оповещ
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
# ключи для Google Captha # ключи для Google Captha
CAPTCHA_PUBLIC_KEY = MY_CAPTCHA_PUBLIC_KEY CAPTCHA_PUBLIC_KEY = env('CAPTCHA_PUBLIC_KEY', default='')
CAPTCHA_PRIVATE_KEY = MY_CAPTCHA_PRIVATE_KEY CAPTCHA_PRIVATE_KEY = env('CAPTCHA_PRIVATE_KEY', default='')
# количество коммерческих предложений во фреме отчета # количество коммерческих предложений во фреме отчета
OFFER_PER_FRAME = 5 OFFER_PER_FRAME = 5
@@ -303,4 +296,4 @@ CATALOG_SORTER_MAGIC_NUMBER_TIZER = 1
MAX_LEN_RING_LOG_BUFFER = 250 # МАКСИМАЛЬНЫЙ РАЗМЕР КОЛЬЦЕВОГО БУФЕРА MAX_LEN_RING_LOG_BUFFER = 250 # МАКСИМАЛЬНЫЙ РАЗМЕР КОЛЬЦЕВОГО БУФЕРА
YANDEX_MAPS_API_KEY = MY_YANDEX_MAPS_API_KEY YANDEX_MAPS_API_KEY = env('YANDEX_MAPS_API_KEY', default='')

View File

@@ -1,4 +1,5 @@
Django==4.1.5 Django==4.1.5
django-environ==0.11.2
asgiref==3.6.0 asgiref==3.6.0
sqlparse==0.4.3 sqlparse==0.4.3

View File

@@ -1,4 +1,5 @@
Django==4.1.5 Django==4.1.5
django-environ==0.11.2
asgiref==3.6.0 asgiref==3.6.0
sqlparse==0.4.3 sqlparse==0.4.3