You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
333 lines
9.6 KiB
333 lines
9.6 KiB
"""
|
|
Django settings for Eshop project.
|
|
|
|
Generated by 'django-admin startproject' using Django 1.10.6.
|
|
|
|
For more information on this file, see
|
|
https://docs.djangoproject.com/en/1.10/topics/settings/
|
|
|
|
For the full list of settings and their values, see
|
|
https://docs.djangoproject.com/en/1.10/ref/settings/
|
|
"""
|
|
|
|
import os
|
|
|
|
from django.urls import reverse_lazy
|
|
|
|
from .env import env
|
|
|
|
# Site basic settings
|
|
SITE_ID = env.str("SITE_ID")
|
|
SITE_HOST = env.str('SITE_HOST')
|
|
SITE_URL_HTTP = 'http://{}'.format(SITE_HOST)
|
|
SITE_URL_HTTPS = 'https://{}'.format(SITE_HOST)
|
|
DEFAULT_SITE_URL = SITE_URL_HTTPS if env.bool('USE_SSL', default=False) else SITE_URL_HTTP
|
|
|
|
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
|
BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
|
|
# Quick-start development settings - unsuitable for production
|
|
# See https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/
|
|
|
|
# SECURITY WARNING: keep the secret key used in production secret!
|
|
SECRET_KEY = env.str('SECRET_KEY')
|
|
|
|
# SECURITY WARNING: don't run with debug turned on in production!
|
|
DEBUG = env.bool('DEBUG')
|
|
TEMPLATE_DEBUG = DEBUG
|
|
|
|
ALLOWED_HOSTS = tuple(env.list('ALLOWED_HOSTS', default=[]))
|
|
|
|
# Application definition
|
|
|
|
INSTALLED_APPS = [
|
|
|
|
'core',
|
|
'cabinet',
|
|
'referral',
|
|
'products',
|
|
'cart',
|
|
'blog_ext',
|
|
'accounts_ext',
|
|
'index',
|
|
'contact_us',
|
|
'flatpages_ext',
|
|
|
|
'registration',
|
|
'ckeditor',
|
|
'ckeditor_uploader',
|
|
'snowpenguin.django.recaptcha2',
|
|
'crispy_forms',
|
|
'mptt',
|
|
'pinax.blog',
|
|
'pinax.images',
|
|
'import_export',
|
|
'django_feedparser',
|
|
'jet.dashboard',
|
|
'jet',
|
|
'djcelery_email',
|
|
|
|
'django.contrib.auth',
|
|
'django.contrib.contenttypes',
|
|
'django.contrib.sessions',
|
|
'django.contrib.messages',
|
|
'django.contrib.staticfiles',
|
|
'django.contrib.postgres',
|
|
'django.contrib.sites',
|
|
'django.contrib.flatpages',
|
|
'django.contrib.admin',
|
|
|
|
]
|
|
|
|
MIDDLEWARE = [
|
|
'django.middleware.security.SecurityMiddleware',
|
|
'django.middleware.common.CommonMiddleware',
|
|
'django.contrib.sessions.middleware.SessionMiddleware',
|
|
'django.middleware.csrf.CsrfViewMiddleware',
|
|
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
|
'django.contrib.messages.middleware.MessageMiddleware',
|
|
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
|
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
|
|
'cart.middleware.CartMonkeyPatchingMiddleware',
|
|
'referral.middleware.ReferralMiddleware',
|
|
]
|
|
|
|
ROOT_URLCONF = 'eshop_project.urls'
|
|
|
|
# Template settings
|
|
|
|
TEMPLATE_DIR = os.path.join(BASE_DIR, 'templates')
|
|
TEMPLATES = [
|
|
{
|
|
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
|
'DIRS': [TEMPLATE_DIR],
|
|
'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',
|
|
'core.context_processors.breadcrumbs',
|
|
'contact_us.context_processors.contact_us_form',
|
|
'products.context_processors.product_search_form',
|
|
'products.context_processors.product_filter_formset',
|
|
'products.context_processors.product_categories',
|
|
'products.context_processors.product_manufacture_list',
|
|
'cart.context_processors.cart_basket',
|
|
],
|
|
},
|
|
},
|
|
]
|
|
|
|
# Crispy templatetags settings
|
|
CRISPY_TEMPLATE_PACK = 'bootstrap'
|
|
|
|
# WSGI server definition
|
|
WSGI_APPLICATION = 'eshop_project.wsgi.application'
|
|
|
|
MPTT_ADMIN_LEVEL_INDENT = 20
|
|
# Database
|
|
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases
|
|
|
|
DATABASES = {
|
|
'extra': {
|
|
'ENGINE': 'django.db.backends.sqlite3',
|
|
'NAME': os.path.join(BASE_DIR, 'eshop.sqlite.db')
|
|
},
|
|
'default': {
|
|
'ENGINE': env.str('DB_ENGINE'),
|
|
'NAME': env.str('DB_NAME'),
|
|
'USER': env.str('DB_USER'),
|
|
'PASSWORD': env.str('DB_PASSWORD'),
|
|
'HOST': env.str('DB_HOST'),
|
|
'PORT': env.str('DB_PORT')
|
|
}
|
|
}
|
|
|
|
# RECAPTCHA SETTINGS
|
|
RECAPTCHA_DISABLE = env.bool("RECAPTCHA_DISABLE")
|
|
RECAPTCHA_PRIVATE_KEY = env.str("RECAPTCHA_PRIVATE_KEY")
|
|
RECAPTCHA_PUBLIC_KEY = env.str("RECAPTCHA_PUBLIC_KEY")
|
|
|
|
# DJANGO REGISTRATION PACKAGE SETTINGS
|
|
ACCOUNT_ACTIVATION_DAYS = env.int('ACCOUNT_ACTIVATION_DAYS', default=3)
|
|
ACTIVATION_EMAIL_HTML = 'emails/html/activation_email.html'
|
|
REGISTRATION_AUTO_LOGIN = env.int('REGISTRATION_AUTO_LOGIN', default=False)
|
|
REGISTRATION_OPEN = env.bool('REGISTRATION_OPEN', default=True)
|
|
REGISTRATION_EMAIL_HTML = env.bool("REGISTRATION_EMAIL_HTML", True)
|
|
REGISTRATION_FORM = 'accounts_ext.forms.RegistrationForm'
|
|
AUTHENTICATION_BACKENDS = [
|
|
'django.contrib.auth.backends.AllowAllUsersModelBackend',
|
|
]
|
|
|
|
# Authentication settings
|
|
LOGOUT_REDIRECT_URL = '/'
|
|
LOGIN_REDIRECT_URL = reverse_lazy('index:index')
|
|
|
|
# Email settings
|
|
EMAIL_BACKEND = 'djcelery_email.backends.CeleryEmailBackend'
|
|
EMAIL_USE_TLS = env.bool('EMAIL_USE_TLS', True)
|
|
EMAIL_USE_SSL = env.bool("EMAIL_USE_SSL", False)
|
|
EMAIL_HOST = env.str('EMAIL_HOST')
|
|
EMAIL_PORT = env.str('EMAIL_PORT')
|
|
EMAIL_HOST_USER = env.str('EMAIL_HOST_USER')
|
|
EMAIL_HOST_PASSWORD = env.str('EMAIL_HOST_PASSWORD')
|
|
|
|
# Email fake validation settings
|
|
DISPOSABLE_EMAIL_DOMAINS = os.path.join(TEMPLATE_DIR, 'emails/disposable_email_domains.txt')
|
|
|
|
# Substituting auth user model
|
|
AUTH_USER_MODEL = 'accounts_ext.User'
|
|
|
|
# Password validation
|
|
# https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators
|
|
|
|
AUTH_PASSWORD_VALIDATORS = [
|
|
{
|
|
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
|
|
},
|
|
{
|
|
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
|
|
},
|
|
{
|
|
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
|
|
},
|
|
{
|
|
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
|
|
},
|
|
]
|
|
|
|
# PINAX BLOG
|
|
# PINAX_BLOG_SCOPING_URL_VAR = "username"
|
|
# PINAX_BLOG_SCOPING_MODEL = AUTH_USER_MODEL
|
|
# PINAX_BLOG_HOOKSET = "multiblog.hooks.HookSet" # where `multiblog` is the package name of our project
|
|
PINAX_BLOG_SLUG_UNIQUE = True
|
|
|
|
# Logging
|
|
LOGGING = {
|
|
'version': 1,
|
|
'disable_existing_loggers': False,
|
|
'filters': {
|
|
'require_debug_false': {
|
|
'()': 'django.utils.log.RequireDebugFalse'
|
|
},
|
|
'require_debug_true': {
|
|
'()': 'django.utils.log.RequireDebugTrue'
|
|
}
|
|
},
|
|
'formatters': {
|
|
'main_formatter': {
|
|
'format': '%(levelname)s:%(name)s: %(message)s:'
|
|
'(%(asctime)s; %(filename)s:%(lineno)d)',
|
|
'datefmt': '%Y-%m-%d %H:%M:%S'
|
|
},
|
|
},
|
|
'handlers': {
|
|
'mail_admins': {
|
|
'level': 'ERROR',
|
|
'filters': ['require_debug_false'],
|
|
'class': 'django.utils.log.AdminEmailHandler'
|
|
},
|
|
'prod_file_handler': {
|
|
'level': 'ERROR',
|
|
'class': 'logging.handlers.RotatingFileHandler',
|
|
'filename': '../logs/eshop_main_prod.log',
|
|
'maxBytes': 1024 * 1024 * 5,
|
|
'backupCount': 7,
|
|
'formatter': 'main_formatter',
|
|
'filters': ['require_debug_false']
|
|
},
|
|
'debug_file_handler': {
|
|
'level': 'DEBUG',
|
|
'class': 'logging.handlers.RotatingFileHandler',
|
|
'filename': '../logs/eshop_main_dev.log',
|
|
'maxBytes': 1024 * 1024 * 5,
|
|
'backupCount': 7,
|
|
'formatter': 'main_formatter',
|
|
'filters': ['require_debug_true']
|
|
},
|
|
},
|
|
'loggers': {
|
|
'django.request': {
|
|
'handlers': ['mail_admins', 'debug_file_handler' if DEBUG else 'prod_file_handler'],
|
|
'level': 'ERROR',
|
|
'propagate': True
|
|
}
|
|
}
|
|
}
|
|
|
|
# Jet configuration
|
|
JET_SIDE_MENU_COMPACT = True
|
|
JET_CHANGE_FORM_SIBLING_LINKS = True
|
|
JET_INDEX_DASHBOARD = 'jet.dashboard.dashboard.DefaultIndexDashboard'
|
|
JET_APP_INDEX_DASHBOARD = 'jet.dashboard.dashboard.DefaultAppIndexDashboard'
|
|
# Internationalization
|
|
# https://docs.djangoproject.com/en/1.10/topics/i18n/
|
|
|
|
LANGUAGE_CODE = 'ru-RU'
|
|
|
|
DATE_FORMAT = 'd E Y'
|
|
|
|
TIME_ZONE = 'UTC'
|
|
|
|
USE_I18N = True
|
|
|
|
USE_L10N = True
|
|
|
|
USE_TZ = True
|
|
|
|
# Static files (CSS, JavaScript, Images)
|
|
# https://docs.djangoproject.com/en/2.0/howto/static-files/
|
|
|
|
STATIC_URL = '/static/'
|
|
|
|
STATICFILES_DIRS = (
|
|
os.path.join(BASE_DIR, "static"),
|
|
)
|
|
|
|
STATIC_ROOT = os.path.join(BASE_DIR, "assets")
|
|
|
|
MEDIA_URL = '/media/'
|
|
|
|
MEDIA_ROOT = os.path.join(BASE_DIR, "assets", "media")
|
|
|
|
# CKEDITOR CONFIG
|
|
CKEDITOR_UPLOAD_PATH = "uploads/"
|
|
CKEDITOR_IMAGE_BACKEND = "pillow"
|
|
CKEDITOR_UPLOAD_SLUGIFY_FILENAME = True
|
|
CKEDITOR_FILENAME_GENERATOR = 'utils.get_filename'
|
|
CKEDITOR_CONFIGS = {
|
|
'awesome_ckeditor': {
|
|
'skin': 'moono-lisa',
|
|
'toolbar': 'advanced',
|
|
'allowedContent': True,
|
|
},
|
|
}
|
|
|
|
# CART SESSION KEY
|
|
CART_SESSION_ID = 'cart'
|
|
|
|
# for import-export excel data
|
|
IMPORT_EXPORT_USE_TRANSACTIONS = True
|
|
|
|
# PAGINATION SETTINGS
|
|
DEFAULT_PAGE_AMOUNT = 10
|
|
|
|
# DEFAULT REFERRAL POINTS
|
|
DEFAULT_REFERRAL_POINTS = 120
|
|
|
|
# REQUISITES
|
|
SUPPLIER_INFO = '''ООО "Русские Программы", ИНН 7713409230, КПП 771301001,
|
|
127411, Москва г, Дмитровское ш., дом № 157, корпус 7, тел.: +74957258950'''
|
|
|
|
PAY_REQUISITES = {
|
|
'name': 'ООО "Русские Программы"',
|
|
'bank': 'АО "СМП БАНК" Г. МОСКВА',
|
|
'INN': '7713409230',
|
|
'KPP': '771301001',
|
|
'BIK': '44525503',
|
|
'bank_acc': '30101810545250000503',
|
|
'acc': '40702810300750000177',
|
|
'sup_info': SUPPLIER_INFO
|
|
}
|
|
|