1 | # coding=utf-8 |
---|
2 | """ |
---|
3 | Simulador Integral de Cadenas Productivas (SICP) |
---|
4 | |
---|
5 | Copyleft (@) 2015 CENDITEL nodo Mérida - https://miv.cenditel.gob.ve/simulacion/ |
---|
6 | """ |
---|
7 | ## @package sicp.settings |
---|
8 | # |
---|
9 | # Configuración de funcionalidades y parámetros del sistema |
---|
10 | # @author Generated by 'django-admin startproject' using Django 1.8. |
---|
11 | # @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve) |
---|
12 | # @author <a href='http://www.cenditel.gob.ve'>Centro Nacional de Desarrollo e Investigación en Tecnologías Libres |
---|
13 | # (CENDITEL) nodo Mérida - Venezuela</a> |
---|
14 | # @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> |
---|
15 | # @version 3.0.0 |
---|
16 | |
---|
17 | # Django settings for sicp project. |
---|
18 | # Generated by 'django-admin startproject' using Django 1.8. |
---|
19 | # For more information on this file, see https://docs.djangoproject.com/en/1.8/topics/settings/ |
---|
20 | # For the full list of settings and their values, see https://docs.djangoproject.com/en/1.8/ref/settings/ |
---|
21 | |
---|
22 | ## Muestra el autor del script cuando es invocado |
---|
23 | __author__ = "Generated by 'django-admin startproject' using Django 1.8." |
---|
24 | ## Muestra documentación breve sobre el script |
---|
25 | __doc__ = "Configuración de funcionalidades y parámetros del sistema" |
---|
26 | |
---|
27 | from database_config import DATABASES_CONFIG |
---|
28 | import os |
---|
29 | |
---|
30 | ## Directorio base desde donde se encuentra ejecutando la aplicación |
---|
31 | BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) |
---|
32 | |
---|
33 | ## Número de versión de la aplicación |
---|
34 | VERSION = '3.0.0' |
---|
35 | |
---|
36 | |
---|
37 | # Quick-start development settings - unsuitable for production |
---|
38 | # See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/ |
---|
39 | |
---|
40 | ## Clave secreta del sistema |
---|
41 | SECRET_KEY = 'exdo%=40*1ry3g2$nyi@oq-i+f^#q0_ksz(kd969^)y=#!zj7(' |
---|
42 | |
---|
43 | ## Identifica si el sistema se encuentra en modo de desarrollo (True) o en modo producción (False) |
---|
44 | DEBUG = True |
---|
45 | |
---|
46 | ## Listado de Hosts permitidos por el sistema |
---|
47 | ALLOWED_HOSTS = ['localhost'] |
---|
48 | |
---|
49 | INTERNAL_IPS = (AH for AH in ALLOWED_HOSTS) |
---|
50 | |
---|
51 | ## Listado de aplicaciones cargadas por el sistema |
---|
52 | INSTALLED_APPS = ( |
---|
53 | 'suit', # Modern theme for Django admin interface |
---|
54 | 'django.contrib.admin', |
---|
55 | 'django.contrib.auth', |
---|
56 | 'django.contrib.contenttypes', |
---|
57 | 'django.contrib.sessions', |
---|
58 | 'django.contrib.messages', |
---|
59 | 'django.contrib.staticfiles', |
---|
60 | 'django.contrib.humanize', |
---|
61 | 'django_extensions', # Opcional, no requerido para el funcionamiento del sistema |
---|
62 | 'wkhtmltopdf', # app para generar reportes en pdf a partir de un html |
---|
63 | 'captcha', |
---|
64 | 'apps.comun', |
---|
65 | 'apps.usuario', |
---|
66 | 'apps.simulacion', |
---|
67 | 'apps.simulacion.sigesic', |
---|
68 | 'apps.simulacion.encuesta', |
---|
69 | 'apps.simulacion.matrizip' |
---|
70 | ) |
---|
71 | |
---|
72 | ## Listado de clases middleware |
---|
73 | MIDDLEWARE_CLASSES = ( |
---|
74 | 'django.contrib.sessions.middleware.SessionMiddleware', |
---|
75 | 'django.middleware.common.CommonMiddleware', |
---|
76 | 'django.middleware.csrf.CsrfViewMiddleware', |
---|
77 | 'django.contrib.auth.middleware.AuthenticationMiddleware', |
---|
78 | 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', |
---|
79 | 'django.contrib.messages.middleware.MessageMiddleware', |
---|
80 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', |
---|
81 | 'django.middleware.security.SecurityMiddleware', |
---|
82 | 'django.middleware.locale.LocaleMiddleware' |
---|
83 | ) |
---|
84 | |
---|
85 | ## Configuración de las URL del sistema |
---|
86 | ROOT_URLCONF = 'sicp.urls' |
---|
87 | |
---|
88 | ## Directorio en donde se encuentran las plantillas base |
---|
89 | BASE_TEMPLATES = os.path.join(BASE_DIR, "templates") |
---|
90 | |
---|
91 | ## Directorio en donde se encuentran las plantillas para la simulación de escenarios |
---|
92 | SIMULACION_TEMPLATES = os.path.join(BASE_DIR, "apps/simulacion/templates") |
---|
93 | |
---|
94 | ## Directorio en donde se encuentran las plantillas del sigesic |
---|
95 | SIGESIC_TEMPLATES = os.path.join(BASE_DIR, "apps/simulacion/sigesic/templates") |
---|
96 | |
---|
97 | ## Directorio en donde se encuentran las plantillas de la encuesta industrial |
---|
98 | ENCUESTA_TEMPLATES = os.path.join(BASE_DIR, "apps/simulacion/encuesta/templates") |
---|
99 | |
---|
100 | ## Configuración de plantillas del sistema |
---|
101 | TEMPLATES = [ |
---|
102 | { |
---|
103 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', |
---|
104 | 'DIRS': [BASE_TEMPLATES, SIMULACION_TEMPLATES, SIGESIC_TEMPLATES, ENCUESTA_TEMPLATES], |
---|
105 | 'APP_DIRS': True, |
---|
106 | 'OPTIONS': { |
---|
107 | 'context_processors': [ |
---|
108 | 'django.template.context_processors.debug', |
---|
109 | 'django.template.context_processors.request', |
---|
110 | 'django.contrib.auth.context_processors.auth', |
---|
111 | 'django.contrib.messages.context_processors.messages', |
---|
112 | ] |
---|
113 | }, |
---|
114 | }, |
---|
115 | ] |
---|
116 | |
---|
117 | ## Configuración para el wsgi de la aplicación |
---|
118 | WSGI_APPLICATION = 'sicp.wsgi.application' |
---|
119 | |
---|
120 | ## Configuración de la(s) base(s) de dato(s) del sistema |
---|
121 | DATABASES = DATABASES_CONFIG |
---|
122 | |
---|
123 | ## Configuración del código del lenguaje a utilizar por defecto |
---|
124 | LANGUAGE_CODE = 'es-ve' |
---|
125 | |
---|
126 | ## Configuración para el nombre de localización por defecto |
---|
127 | LOCALE_NAME = 'es' |
---|
128 | |
---|
129 | ## Configuración para la zona horaria por defecto |
---|
130 | TIME_ZONE = 'UTC' |
---|
131 | |
---|
132 | ## Determina si se emplea la internacionalización I18N |
---|
133 | USE_I18N = True |
---|
134 | |
---|
135 | ## Determina si se emplea la internacionalización L10N |
---|
136 | USE_L10N = True |
---|
137 | |
---|
138 | ## Determina si se emplea la zona horaria |
---|
139 | USE_TZ = True |
---|
140 | |
---|
141 | |
---|
142 | # Static files (CSS, JavaScript, Images) |
---|
143 | # https://docs.djangoproject.com/en/1.8/howto/static-files/ |
---|
144 | |
---|
145 | ## Configuración de la raíz donde se encuentran los archivos estaticos del sistema (para entornos en producción) |
---|
146 | STATIC_ROOT = '' |
---|
147 | |
---|
148 | ## Configuración de la url que atenderá las peticiones de los archivos estáticos del sistema |
---|
149 | STATIC_URL = '/static/' |
---|
150 | |
---|
151 | ## Configuración de los directorios en donde se encuentran los archivos estáticos |
---|
152 | STATICFILES_DIRS = ( |
---|
153 | os.path.join(BASE_DIR, 'static/'), |
---|
154 | os.path.join(BASE_DIR, 'tmp/'), |
---|
155 | # Directorios en los cuales buscar archivos estaticos en produccion, en caso de ubicar los archivos estáticos en |
---|
156 | # otro directorio, se debe agregar la ruta |
---|
157 | '/var/www/html/sicp/static/', |
---|
158 | ) |
---|
159 | |
---|
160 | ## Configuración que permite buscar distintas ubicaciones de archivos estáticos |
---|
161 | STATICFILES_FINDER = ( |
---|
162 | 'django.contrib.staticfiles.finders.FileSystemFinder', |
---|
163 | 'django.contrib.staticfiles.finders.AppDirectoriesFinder', |
---|
164 | ) |
---|
165 | |
---|
166 | ## URL de acceso al sistema |
---|
167 | LOGIN_URL = "/login" |
---|
168 | ## URL de salida del sistema |
---|
169 | LOGOUT_URL = "/logout" |
---|
170 | |
---|
171 | ## configuración que permite obtener la ruta en donde se encuentran las traducciones de la aplicación a otros lenguajes |
---|
172 | LOCALE_PATHS = ( |
---|
173 | os.path.join(BASE_DIR, 'locale'), |
---|
174 | ) |
---|
175 | |
---|
176 | ## Registro de mensajes al usuario |
---|
177 | MESSAGE_STORAGE = 'django.contrib.messages.storage.cookie.CookieStorage' |
---|
178 | |
---|
179 | ## Parámetros de configuración del panel administrativo del sistema |
---|
180 | SUIT_CONFIG = { |
---|
181 | # header |
---|
182 | 'ADMIN_NAME': 'SICP v%s' % VERSION, |
---|
183 | 'HEADER_DATE_FORMAT': 'l, d F Y', |
---|
184 | 'HEADER_TIME_FORMAT': 'h:i a', |
---|
185 | |
---|
186 | 'LIST_PER_PAGE': 15, |
---|
187 | } |
---|
188 | |
---|
189 | # Configuración de variables para el envío de correo electrónico |
---|
190 | ## Nombre del Servidor de correo SMTP |
---|
191 | EMAIL_HOST = 'localhost' |
---|
192 | ## Puerto del Servfidor de correo SMTP |
---|
193 | EMAIL_PORT = 25 |
---|
194 | ## Dirección de correo electrónico del Simulador Integral de Cadenas Productivas |
---|
195 | EMAIL_FROM = 'sicp@cenditel.gob.ve' |
---|
196 | ## Dirección de correo electrónico del Servidor |
---|
197 | #SERVER_EMAIL = 'sicp@cenditel.gob.ve' |
---|
198 | ## Dirección de correo electrónico por defecto |
---|
199 | #DEFAULT_FROM_EMAIL = 'sicp@cenditel.gob.ve' |
---|
200 | |
---|
201 | ## Registro de vitácoras de errores (logs) |
---|
202 | LOGS_PATH = '/var/log/sicp' |
---|
203 | |
---|
204 | ## Configuración de los niveles de vitácoras (logs) a registrar |
---|
205 | LOGGING = dict(version=1, disable_existing_loggers=True, formatters={ |
---|
206 | 'std': { |
---|
207 | 'format': '%(asctime)s %(levelname)-8s [modulo: %(module)s, funcion: %(funcName)s, linea: %(lineno)d]. %(message)s', |
---|
208 | } |
---|
209 | }, handlers={ |
---|
210 | 'null': { |
---|
211 | 'level': 'DEBUG', |
---|
212 | 'class': 'django.utils.log.NullHandler' |
---|
213 | }, |
---|
214 | 'comun': { |
---|
215 | 'class': 'logging.handlers.TimedRotatingFileHandler', |
---|
216 | 'level': 'DEBUG', |
---|
217 | 'formatter': 'std', |
---|
218 | 'filename': os.path.join(LOGS_PATH, 'comun.log'), |
---|
219 | 'when': 'w6', |
---|
220 | 'interval': 1, |
---|
221 | 'backupCount': 52 |
---|
222 | }, |
---|
223 | 'usuario': { |
---|
224 | 'class': 'logging.handlers.TimedRotatingFileHandler', |
---|
225 | 'level': 'DEBUG', |
---|
226 | 'formatter': 'std', |
---|
227 | 'filename': os.path.join(LOGS_PATH, 'usuario.log'), |
---|
228 | 'when': 'w6', |
---|
229 | 'interval': 1, |
---|
230 | 'backupCount': 52 |
---|
231 | }, |
---|
232 | 'simulacion': { |
---|
233 | 'class': 'logging.handlers.TimedRotatingFileHandler', |
---|
234 | 'level': 'DEBUG', |
---|
235 | 'formatter': 'std', |
---|
236 | 'filename': os.path.join(LOGS_PATH, 'simulacion.log'), |
---|
237 | 'when': 'w6', |
---|
238 | 'interval': 1, |
---|
239 | 'backupCount': 52 |
---|
240 | }, |
---|
241 | 'sigesic': { |
---|
242 | 'class': 'logging.handlers.TimedRotatingFileHandler', |
---|
243 | 'level': 'DEBUG', |
---|
244 | 'formatter': 'std', |
---|
245 | 'filename': os.path.join(LOGS_PATH, 'sigesic.log'), |
---|
246 | 'when': 'w6', |
---|
247 | 'interval': 1, |
---|
248 | 'backupCount': 52 |
---|
249 | } |
---|
250 | }, loggers={ |
---|
251 | 'root': { |
---|
252 | 'level': 'DEBUG', |
---|
253 | 'handlers': ['usuario'] |
---|
254 | }, |
---|
255 | 'comun': { |
---|
256 | 'level': 'DEBUG', |
---|
257 | 'handlers': ['comun'], |
---|
258 | 'qualname': 'comun' |
---|
259 | }, |
---|
260 | 'usuario': { |
---|
261 | 'level': 'DEBUG', |
---|
262 | 'handlers': ['usuario'], |
---|
263 | 'qualname': 'usuario' |
---|
264 | }, |
---|
265 | 'simulacion': { |
---|
266 | 'level': 'DEBUG', |
---|
267 | 'handlers': ['simulacion'], |
---|
268 | 'qualname': 'simulacion' |
---|
269 | }, |
---|
270 | 'sigesic': { |
---|
271 | 'level': 'DEBUG', |
---|
272 | 'handlers': ['sigesic'], |
---|
273 | 'qualname': 'sigesic' |
---|
274 | }, |
---|
275 | 'django.request': { |
---|
276 | 'handlers': ['null'], |
---|
277 | 'level': 'ERROR', |
---|
278 | 'propagate': False, |
---|
279 | } |
---|
280 | }) |
---|
281 | |
---|
282 | # Configuración del CAPTCHA |
---|
283 | ## Ruta en donde se encuentra el diccionario de palabras a utilizar en la generación del captcha |
---|
284 | CAPTCHA_WORDS_DICTIONARY = os.path.join(BASE_DIR, "static/dictionaries/captcha-es.txt") |
---|
285 | ## Establece el tipo de captcha a generar. Se establece a la extraccion de palabras a partir de un diccionario |
---|
286 | CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.word_challenge' |
---|
287 | ## Longitud de carácteres a mostrar en la imagen del captcha |
---|
288 | CAPTCHA_LENGTH = 6 |
---|
289 | ## Longitud de carácteres máxima permitida para extraer del diccionario |
---|
290 | CAPTCHA_DICTIONARY_MAX_LENGTH = 6 |
---|
291 | ## Longitud de carácteres mínima permitida para extraer del diccionario |
---|
292 | CAPTCHA_DICTIONARY_MIN_LENGTH = 4 |
---|
293 | ## Color de fondo para la imagen del captcha |
---|
294 | CAPTCHA_BACKGROUND_COLOR = '#337AB7' |
---|
295 | ## Color de la fuente para la imagen del captcha |
---|
296 | CAPTCHA_FOREGROUND_COLOR = '#FFF' |
---|
297 | |
---|
298 | if DEBUG: |
---|
299 | ## Elimina la imagen de ruido en el fondo del captcha cuando la aplicacion se encuentra en modo desarrollo |
---|
300 | CAPTCHA_NOISE_FUNCTIONS = ('captcha.helpers.noise_null',) |
---|