|
@ -1,68 +1,56 @@ |
|
|
""" |
|
|
|
|
|
Django settings for mamweb project. |
|
|
|
|
|
|
|
|
|
|
|
For more information on this file, see |
|
|
|
|
|
https://docs.djangoproject.com/en/1.7/topics/settings/ |
|
|
|
|
|
|
|
|
|
|
|
For the full list of settings and their values, see |
|
|
|
|
|
https://docs.djangoproject.com/en/1.7/ref/settings/ |
|
|
|
|
|
""" |
|
|
|
|
|
|
|
|
|
|
|
# Build paths inside the project like this: os.path.join(BASE_DIR, ...) |
|
|
|
|
|
import os |
|
|
import os |
|
|
import traceback |
|
|
import traceback |
|
|
|
|
|
|
|
|
BASE_DIR = os.path.dirname(os.path.dirname(__file__)) |
|
|
BASE_DIR = os.path.dirname(os.path.dirname(__file__)) |
|
|
|
|
|
|
|
|
# Application definition |
|
|
# Application definition |
|
|
|
|
|
|
|
|
SITE_ID = 1 |
|
|
SITE_ID = 1 |
|
|
ROOT_URLCONF = 'mamweb.urls' |
|
|
ROOT_URLCONF = 'mamweb.urls' |
|
|
WSGI_APPLICATION = 'mamweb.wsgi.application' |
|
|
WSGI_APPLICATION = 'mamweb.wsgi.application' |
|
|
|
|
|
|
|
|
APPEND_SLASH = True |
|
|
# Lokalizace |
|
|
|
|
|
|
|
|
# Internationalization |
|
|
|
|
|
# https://docs.djangoproject.com/en/1.7/topics/i18n/ |
|
|
|
|
|
|
|
|
|
|
|
LANGUAGE_CODE = 'cs' |
|
|
LANGUAGE_CODE = 'cs' |
|
|
TIME_ZONE = 'Europe/Prague' |
|
|
TIME_ZONE = 'Europe/Prague' |
|
|
USE_I18N = True |
|
|
USE_L10N = True # S přechodem k djangu>=4 lze smazat (localized formatting) |
|
|
USE_L10N = True |
|
|
USE_TZ = True # S přechodem k djangu>=5 lze smazat (timezone aware datetimes) |
|
|
USE_TZ = True |
|
|
|
|
|
|
|
|
|
|
|
# Static files (CSS, JavaScript, Images) |
|
|
|
|
|
# https://docs.djangoproject.com/en/1.7/howto/static-files/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Statické soubory (CSS, JavaScript, obrázky) a další média |
|
|
STATIC_URL = '/static/' |
|
|
STATIC_URL = '/static/' |
|
|
MEDIA_URL = '/media/' |
|
|
MEDIA_URL = '/media/' |
|
|
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') |
|
|
MEDIA_ROOT = os.path.join(BASE_DIR, 'media') |
|
|
STATIC_ROOT = os.path.join(BASE_DIR, 'static') |
|
|
STATIC_ROOT = os.path.join(BASE_DIR, 'static') |
|
|
|
|
|
|
|
|
STATICFILES_FINDERS = ( |
|
|
STATICFILES_FINDERS = ( |
|
|
'django.contrib.staticfiles.finders.AppDirectoriesFinder', |
|
|
'django.contrib.staticfiles.finders.AppDirectoriesFinder', |
|
|
'django.contrib.staticfiles.finders.FileSystemFinder', |
|
|
'django.contrib.staticfiles.finders.FileSystemFinder', |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
# Where redirect for login required services |
|
|
# URL pro přihlášení (default je account/login) |
|
|
LOGIN_URL = 'login' |
|
|
LOGIN_URL = 'login' |
|
|
LOGIN_REDIRECT_URL = 'profil' |
|
|
LOGIN_REDIRECT_URL = 'profil' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Odhlášení po zavření prohlížeče |
|
|
# Odhlášení po zavření prohlížeče |
|
|
# (pozor nefunguje na firefox se znovuotevíráním oken po startu firefoxu) |
|
|
# (pozor nefunguje na firefox se znovuotevíráním oken po startu firefoxu) |
|
|
# default je False a SESSION_COOKIE_AGE = 3600*24*14 = 2 týdny |
|
|
# default je False a SESSION_COOKIE_AGE = 3600*24*14 = 2 týdny |
|
|
SESSION_EXPIRE_AT_BROWSER_CLOSE = True |
|
|
SESSION_EXPIRE_AT_BROWSER_CLOSE = True |
|
|
DOBA_ODHLASENI_PRI_ZASKRTNUTI_NEODHLASOVAT = 365 * 24 * 3600 # rok |
|
|
DOBA_ODHLASENI_PRI_ZASKRTNUTI_NEODHLASOVAT = 365 * 24 * 3600 # rok |
|
|
|
|
|
|
|
|
# Modules configuration |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# SECURITY WARNING: keep the secret key used in production secret! |
|
|
|
|
|
# Create file 'django.secret' in every install (it is not kept in git) |
|
|
|
|
|
try: |
|
|
|
|
|
with open(os.path.join(os.path.dirname(__file__), '..', 'django.secret')) as f: |
|
|
|
|
|
SECRET_KEY = f.readline().strip() |
|
|
|
|
|
except: |
|
|
|
|
|
SECRET_KEY = '12345zmr_k53a*@f4q_+ji^o@!pgpef*5&8c7zzdqwkdlkj' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Přidávání dalších součástí (do) djangovské mašinérie |
|
|
AUTHENTICATION_BACKENDS = ( |
|
|
AUTHENTICATION_BACKENDS = ( |
|
|
'django.contrib.auth.backends.ModelBackend', |
|
|
'django.contrib.auth.backends.ModelBackend', |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MIDDLEWARE = ( |
|
|
MIDDLEWARE = ( |
|
|
# 'reversion.middleware.RevisionMiddleware', |
|
|
# 'reversion.middleware.RevisionMiddleware', |
|
|
'django.contrib.sessions.middleware.SessionMiddleware', |
|
|
'django.contrib.sessions.middleware.SessionMiddleware', |
|
|
'django.middleware.common.CommonMiddleware', |
|
|
'django.middleware.common.CommonMiddleware', |
|
|
'django.middleware.csrf.CsrfViewMiddleware', |
|
|
'django.middleware.csrf.CsrfViewMiddleware', |
|
@ -71,7 +59,6 @@ MIDDLEWARE = ( |
|
|
'django.middleware.clickjacking.XFrameOptionsMiddleware', |
|
|
'django.middleware.clickjacking.XFrameOptionsMiddleware', |
|
|
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware', |
|
|
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware', |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
TEMPLATES = [ |
|
|
TEMPLATES = [ |
|
|
{ |
|
|
{ |
|
|
'BACKEND': 'django.template.backends.django.DjangoTemplates', |
|
|
'BACKEND': 'django.template.backends.django.DjangoTemplates', |
|
@ -80,7 +67,7 @@ TEMPLATES = [ |
|
|
'OPTIONS': { |
|
|
'OPTIONS': { |
|
|
'context_processors': ( |
|
|
'context_processors': ( |
|
|
'django.contrib.auth.context_processors.auth', |
|
|
'django.contrib.auth.context_processors.auth', |
|
|
'django.template.context_processors.request', |
|
|
'django.template.context_processors.request', |
|
|
'django.contrib.messages.context_processors.messages', |
|
|
'django.contrib.messages.context_processors.messages', |
|
|
'sekizai.context_processors.sekizai', |
|
|
'sekizai.context_processors.sekizai', |
|
|
'header_fotky.context_processors.vzhled', |
|
|
'header_fotky.context_processors.vzhled', |
|
@ -90,12 +77,7 @@ TEMPLATES = [ |
|
|
}, |
|
|
}, |
|
|
}, |
|
|
}, |
|
|
] |
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
INSTALLED_APPS = ( |
|
|
INSTALLED_APPS = ( |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Basic |
|
|
# Basic |
|
|
'django.contrib.contenttypes', |
|
|
'django.contrib.contenttypes', |
|
|
'django.contrib.sessions', |
|
|
'django.contrib.sessions', |
|
@ -151,59 +133,50 @@ INSTALLED_APPS = ( |
|
|
|
|
|
|
|
|
# Admin upravy: |
|
|
# Admin upravy: |
|
|
|
|
|
|
|
|
# 'material', |
|
|
# 'material', |
|
|
# 'material.admin', |
|
|
# 'material.admin', |
|
|
# 'admin_tools', |
|
|
# 'admin_tools', |
|
|
# 'admin_tools.theming', |
|
|
# 'admin_tools.theming', |
|
|
# 'admin_tools.menu', |
|
|
# 'admin_tools.menu', |
|
|
# 'admin_tools.dashboard', |
|
|
# 'admin_tools.dashboard', |
|
|
'django.contrib.admin', |
|
|
'django.contrib.admin', |
|
|
|
|
|
|
|
|
# Nechat na konci (INSTALLED_APPS je uspořádané): |
|
|
# Nechat na konci (INSTALLED_APPS je uspořádané): |
|
|
'django_cleanup.apps.CleanupConfig', # Uklízí media/ |
|
|
'django_cleanup.apps.CleanupConfig', # Uklízí media/ |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
DEBUG_TOOLBAR_CONFIG = { |
|
|
|
|
|
'SHOW_COLLAPSED': True, |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
SUMMERNOTE_CONFIG = { |
|
|
# MaM-specifické složky |
|
|
'iframe': False, |
|
|
SEMINAR_RESENI_DIR = os.path.join('reseni') |
|
|
'airMode': False, |
|
|
SEMINAR_KONFERY_DIR = os.path.join('konfery') |
|
|
'attachment_require_authentication': True, |
|
|
KOREKTURY_PDF_DIR = os.path.join('korektury', 'pdf') |
|
|
'width': '80%', |
|
|
KOREKTURY_IMG_DIR = os.path.join('korektury', 'img') |
|
|
# 'height': '30em', |
|
|
CISLO_IMG_DIR = os.path.join('cislo', 'img') |
|
|
'toolbar': [ |
|
|
|
|
|
['style', ['style']], |
|
|
|
|
|
['font', ['bold', 'italic', 'superscript', 'subscript', 'clear']], |
|
|
|
|
|
['color', ['color']], |
|
|
|
|
|
['para', ['ul', 'ol', 'paragraph']], |
|
|
|
|
|
['table', ['table']], |
|
|
|
|
|
['insert', ['link', 'picture', 'hr']], |
|
|
|
|
|
['view', ['fullscreen', 'codeview']], |
|
|
|
|
|
['help', ['help']], |
|
|
|
|
|
] |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# MaM-specifické konstanty |
|
|
|
|
|
# TODO (e-maily atd.) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# CKEditor = WYSIWYG html editor |
|
|
CKEDITOR_UPLOAD_PATH = "uploads/" |
|
|
CKEDITOR_UPLOAD_PATH = "uploads/" |
|
|
CKEDITOR_IMAGE_BACKEND = 'pillow' |
|
|
CKEDITOR_IMAGE_BACKEND = 'pillow' |
|
|
#CKEDITOR_JQUERY_URL = '//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js' |
|
|
# CKEDITOR_JQUERY_URL = '//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js' |
|
|
CKEDITOR_CONFIGS = { |
|
|
CKEDITOR_CONFIGS = { |
|
|
'default': { |
|
|
'default': { |
|
|
'entities': False, |
|
|
'entities': False, |
|
|
'toolbar': [ |
|
|
'toolbar': [ |
|
|
['Source', 'ShowBlocks', '-', 'Maximize'], |
|
|
['Source', 'ShowBlocks', '-', 'Maximize'], |
|
|
['Bold', 'Italic', 'Subscript', 'Superscript', '-', 'RemoveFormat'], |
|
|
['Bold', 'Italic', 'Subscript', 'Superscript', '-', 'RemoveFormat'], |
|
|
['NumberedList','BulletedList','-','Blockquote','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'], |
|
|
['NumberedList', 'BulletedList', '-', 'Blockquote', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock'], |
|
|
['Link', 'Unlink', 'Anchor', '-', 'Image', 'Table', 'HorizontalRule'], |
|
|
['Link', 'Unlink', 'Anchor', '-', 'Image', 'Table', 'HorizontalRule'], |
|
|
['Format'], |
|
|
['Format'], |
|
|
|
|
|
|
|
|
], |
|
|
], |
|
|
# 'toolbar': 'full', |
|
|
# 'toolbar': 'full', |
|
|
'height': '40em', |
|
|
'height': '40em', |
|
|
'width': '100%', |
|
|
'width': '100%', |
|
|
'toolbarStartupExpanded': False, |
|
|
'toolbarStartupExpanded': False, |
|
|
'allowedContent' : True, |
|
|
'allowedContent': True, |
|
|
}, |
|
|
}, |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -223,31 +196,21 @@ WEBPACK_LOADER = { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Dajngo REST Framework |
|
|
# Dajngo REST Framework |
|
|
|
|
|
|
|
|
REST_FRAMEWORK = { |
|
|
REST_FRAMEWORK = { |
|
|
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination', |
|
|
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination', |
|
|
'PAGE_SIZE': 100 |
|
|
'PAGE_SIZE': 100 |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# SECURITY WARNING: keep the secret key used in production secret! |
|
|
# Logování |
|
|
# Create file 'django.secret' in every install (it is not kept in git) |
|
|
|
|
|
|
|
|
|
|
|
try: |
|
|
|
|
|
with open(os.path.join(os.path.dirname(__file__), '..', 'django.secret')) as f: |
|
|
|
|
|
SECRET_KEY = f.readline().strip() |
|
|
|
|
|
except: |
|
|
|
|
|
SECRET_KEY = '12345zmr_k53a*@f4q_+ji^o@!pgpef*5&8c7zzdqwkdlkj' |
|
|
|
|
|
|
|
|
|
|
|
# Logging |
|
|
|
|
|
|
|
|
|
|
|
LOGGING = { |
|
|
LOGGING = { |
|
|
'version': 1, |
|
|
'version': 1, |
|
|
'disable_existing_loggers': False, |
|
|
'disable_existing_loggers': False, |
|
|
|
|
|
|
|
|
'formatters': { |
|
|
'formatters': { |
|
|
'verbose': { |
|
|
'verbose': { |
|
|
'format': '%(levelname)s %(asctime)s %(module)s (logger %(name)s): %(message)s' |
|
|
'format': |
|
|
|
|
|
'%(levelname)s %(asctime)s %(module)s (logger %(name)s): %(message)s' |
|
|
}, |
|
|
}, |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
@ -278,18 +241,18 @@ LOGGING = { |
|
|
'filters': ['Http404AsInfo'], |
|
|
'filters': ['Http404AsInfo'], |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
'seminar.prihlaska.form':{ |
|
|
'seminar.prihlaska.form': { |
|
|
'handlers': ['console','registration_logfile'], |
|
|
'handlers': ['console', 'registration_logfile'], |
|
|
'level': 'INFO' |
|
|
'level': 'INFO' |
|
|
}, |
|
|
}, |
|
|
'seminar.prihlaska.problem':{ |
|
|
'seminar.prihlaska.problem': { |
|
|
'handlers': ['console','mail_registration','registration_error_log'], |
|
|
'handlers': ['console', 'mail_registration', 'registration_error_log'], |
|
|
'level': 'INFO' |
|
|
'level': 'INFO' |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
# Catch-all logger |
|
|
# Catch-all logger |
|
|
'': { |
|
|
'': { |
|
|
'handlers': ['console'], # Add 'mail_admins' in prod and test |
|
|
'handlers': ['console'], |
|
|
'level': 'DEBUG', |
|
|
'level': 'DEBUG', |
|
|
'filters': ['StripSensitiveFormData'], |
|
|
'filters': ['StripSensitiveFormData'], |
|
|
}, |
|
|
}, |
|
@ -299,7 +262,7 @@ LOGGING = { |
|
|
'handlers': { |
|
|
'handlers': { |
|
|
|
|
|
|
|
|
'console': { |
|
|
'console': { |
|
|
'level': 'WARNING', ## Set to 'DEBUG' in local |
|
|
'level': 'WARNING', |
|
|
'class': 'logging.StreamHandler', |
|
|
'class': 'logging.StreamHandler', |
|
|
'formatter': 'verbose', |
|
|
'formatter': 'verbose', |
|
|
}, |
|
|
}, |
|
@ -315,36 +278,24 @@ LOGGING = { |
|
|
'class': 'django.utils.log.AdminEmailHandler', |
|
|
'class': 'django.utils.log.AdminEmailHandler', |
|
|
'formatter': 'verbose', |
|
|
'formatter': 'verbose', |
|
|
}, |
|
|
}, |
|
|
'registration_logfile':{ |
|
|
'registration_logfile': { |
|
|
'level': 'INFO', |
|
|
'level': 'INFO', |
|
|
'class': 'logging.FileHandler', |
|
|
'class': 'logging.FileHandler', |
|
|
# filename declared in specific configuration files |
|
|
# filename declared in specific configuration files |
|
|
'formatter': 'verbose', |
|
|
'formatter': 'verbose', |
|
|
}, |
|
|
}, |
|
|
'registration_error_log':{ |
|
|
'registration_error_log': { |
|
|
'level': 'INFO', |
|
|
'level': 'INFO', |
|
|
'class': 'logging.FileHandler', |
|
|
'class': 'logging.FileHandler', |
|
|
# filename declared in specific configuration files |
|
|
# filename declared in specific configuration files |
|
|
'formatter': 'verbose', |
|
|
'formatter': 'verbose', |
|
|
}, |
|
|
}, |
|
|
|
|
|
|
|
|
}, |
|
|
}, |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
# Permissions for uploads |
|
|
|
|
|
FILE_UPLOAD_PERMISSIONS = 0o0644 |
|
|
|
|
|
|
|
|
|
|
|
# MaM specific |
|
|
|
|
|
|
|
|
|
|
|
SEMINAR_RESENI_DIR = os.path.join('reseni') |
|
|
# Logování neexistujících proměnných v templatech |
|
|
SEMINAR_KONFERY_DIR = os.path.join('konfery') |
|
|
|
|
|
KOREKTURY_PDF_DIR = os.path.join('korektury', 'pdf') |
|
|
|
|
|
KOREKTURY_IMG_DIR = os.path.join('korektury', 'img') |
|
|
|
|
|
CISLO_IMG_DIR = os.path.join('cislo', 'img') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Logování chyb |
|
|
|
|
|
class InvalidTemplateVariable(str): |
|
|
class InvalidTemplateVariable(str): |
|
|
def __mod__(self, variable): |
|
|
def __mod__(self, variable): |
|
|
import logging |
|
|
import logging |
|
@ -356,5 +307,38 @@ class InvalidTemplateVariable(str): |
|
|
return '' |
|
|
return '' |
|
|
TEMPLATES[0]['OPTIONS']['string_if_invalid'] = InvalidTemplateVariable('%s') |
|
|
TEMPLATES[0]['OPTIONS']['string_if_invalid'] = InvalidTemplateVariable('%s') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Django 3.2 vyžaduje explicitní nastavení autoklíče, zatím nechápu proč |
|
|
# Django 3.2 vyžaduje explicitní nastavení autoklíče, zatím nechápu proč |
|
|
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField' |
|
|
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# TODO odstranit? (Je to default.) |
|
|
|
|
|
# Whether to append trailing slashes to URLs. |
|
|
|
|
|
APPEND_SLASH = True |
|
|
|
|
|
# TODO odstranit? (Je to default.) |
|
|
|
|
|
# Permissions for uploads |
|
|
|
|
|
FILE_UPLOAD_PERMISSIONS = 0o0644 |
|
|
|
|
|
# TODO odstranit? (Je to default.) |
|
|
|
|
|
# Automatická lokalizace |
|
|
|
|
|
USE_I18N = True |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# TODO odstranit? (Nevím o tom, že bychom ho někde používali.) |
|
|
|
|
|
# Summernote = WYSIWYG editor (pro admin?) |
|
|
|
|
|
SUMMERNOTE_CONFIG = { |
|
|
|
|
|
'iframe': False, |
|
|
|
|
|
'airMode': False, |
|
|
|
|
|
'attachment_require_authentication': True, |
|
|
|
|
|
'width': '80%', |
|
|
|
|
|
# 'height': '30em', |
|
|
|
|
|
'toolbar': [ |
|
|
|
|
|
['style', ['style']], |
|
|
|
|
|
['font', ['bold', 'italic', 'superscript', 'subscript', 'clear']], |
|
|
|
|
|
['color', ['color']], |
|
|
|
|
|
['para', ['ul', 'ol', 'paragraph']], |
|
|
|
|
|
['table', ['table']], |
|
|
|
|
|
['insert', ['link', 'picture', 'hr']], |
|
|
|
|
|
['view', ['fullscreen', 'codeview']], |
|
|
|
|
|
['help', ['help']], |
|
|
|
|
|
] |
|
|
|
|
|
} |
|
|