1 | """ |
---|
2 | Sistema Estadístico Integral de Venezuela - (SEIVEN) |
---|
3 | |
---|
4 | Copyleft (@) 2015 CENDITEL nodo Mérida - https://mpv.cenditel.gob.ve/seiven |
---|
5 | """ |
---|
6 | ## @package seiven.settings |
---|
7 | # |
---|
8 | # Configuración de funcionalidades y parámetros del sistema |
---|
9 | # @author Generated by 'django-admin startproject' using Django 1.9.7 |
---|
10 | # @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve) |
---|
11 | # @author <a href='http://www.cenditel.gob.ve'>Centro Nacional de Desarrollo e Investigación en Tecnologías Libres |
---|
12 | # (CENDITEL) nodo Mérida - Venezuela</a> |
---|
13 | # @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> |
---|
14 | # @version 1.0.0 |
---|
15 | from __future__ import unicode_literals |
---|
16 | |
---|
17 | from .database_config import DATABASES_CONFIG |
---|
18 | |
---|
19 | import os |
---|
20 | |
---|
21 | ## Directorio base desde donde se encuentra ejecutando la aplicación |
---|
22 | BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) |
---|
23 | |
---|
24 | ## Número de versión de la aplicación |
---|
25 | VERSION = '1.0.0' |
---|
26 | |
---|
27 | # SECURITY WARNING: keep the secret key used in production secret! |
---|
28 | SECRET_KEY = '$#iabgq1k!v$$-a*3$tp)l)c!jr-bnyk(2-q!isylwtpnksbsv' |
---|
29 | |
---|
30 | ## Identifica si el sistema se encuentra en modo de desarrollo (True) o en modo producción (False) |
---|
31 | DEBUG = True |
---|
32 | |
---|
33 | ## Identifica a los servidores permitidos que atienden las peticiones del sistema |
---|
34 | ALLOWED_HOSTS = ['localhost'] |
---|
35 | |
---|
36 | ## Identifica el host permitido para consumir las APIs del Sistema de Estadísticas Económico Productivas |
---|
37 | SIDEPRO_ALLOWED_HOST = ['localhost'] |
---|
38 | |
---|
39 | ## Identifica a los administradores del sistema |
---|
40 | ADMINS = [ |
---|
41 | ('Ing. Roldan Vargas', 'rvargas@cenditel.gob.ve'), |
---|
42 | ] |
---|
43 | |
---|
44 | ## Listado de aplicaciones base del sistema |
---|
45 | PREREQ_APPS = [ |
---|
46 | 'django.contrib.admin', |
---|
47 | 'django.contrib.auth', |
---|
48 | 'django.contrib.contenttypes', |
---|
49 | 'django.contrib.sessions', |
---|
50 | 'django.contrib.messages', |
---|
51 | 'django.contrib.staticfiles', |
---|
52 | 'captcha', |
---|
53 | ] |
---|
54 | |
---|
55 | if DEBUG: |
---|
56 | ## Aplicaciones requeridas para entornos de desarrollo |
---|
57 | PREREQ_APPS += [ |
---|
58 | 'django_extensions', |
---|
59 | 'debug_toolbar', |
---|
60 | 'sslserver', # Aplicación para ejecutar un servidor de desarrollo bajo el protocolo https |
---|
61 | ] |
---|
62 | |
---|
63 | ## Configuracion de parametros de django-debug-toolbar |
---|
64 | JQUERY_URL = '' |
---|
65 | |
---|
66 | ## Listado de aplicaciones del projecto |
---|
67 | PROJECT_APPS = [ |
---|
68 | 'base', |
---|
69 | 'usuario', |
---|
70 | 'economico', |
---|
71 | 'api_client', |
---|
72 | 'productivo', |
---|
73 | 'gestion_informacion', |
---|
74 | ] |
---|
75 | |
---|
76 | ## Listado de aplicaciones cargadas por el sistema |
---|
77 | INSTALLED_APPS = PREREQ_APPS + PROJECT_APPS |
---|
78 | |
---|
79 | |
---|
80 | MIDDLEWARE_CLASSES = [ |
---|
81 | 'django.middleware.security.SecurityMiddleware', |
---|
82 | 'django.contrib.sessions.middleware.SessionMiddleware', |
---|
83 | 'django.middleware.locale.LocaleMiddleware', |
---|
84 | 'django.middleware.common.CommonMiddleware', |
---|
85 | 'django.middleware.csrf.CsrfViewMiddleware', |
---|
86 | 'django.contrib.auth.middleware.AuthenticationMiddleware', |
---|
87 | 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', |
---|
88 | 'django.contrib.messages.middleware.MessageMiddleware', |
---|
89 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', |
---|
90 | ] |
---|
91 | |
---|
92 | if DEBUG: |
---|
93 | MIDDLEWARE_CLASSES += [ |
---|
94 | 'debug_toolbar.middleware.DebugToolbarMiddleware', |
---|
95 | ] |
---|
96 | |
---|
97 | ## Configuración de las URL del sistema |
---|
98 | ROOT_URLCONF = 'seiven.urls' |
---|
99 | |
---|
100 | ## Directorio en donde se encuentran las plantillas en el root de la aplicación |
---|
101 | ROOT_TEMPLATES = os.path.join(BASE_DIR, "templates") |
---|
102 | |
---|
103 | ## Directorio en donde se encuentran las plantillas del módulo base |
---|
104 | BASE_TEMPLATES = os.path.join(BASE_DIR, "base/templates") |
---|
105 | |
---|
106 | ## Directorio en donde se encuentran las plantillas del módulo económico |
---|
107 | ECONOMICO_TEMPLATES = os.path.join(BASE_DIR, "economico/templates","consulta") |
---|
108 | |
---|
109 | ## Directorio en donde se encuentran las plantillas del módulo económico |
---|
110 | PRODUCTIVO_TEMPLATES = os.path.join(BASE_DIR, "productivo/templates") |
---|
111 | |
---|
112 | ## Directorio en donde se encuentran las plantillas del módulo de usuarios |
---|
113 | USUARIO_TEMPLATES = os.path.join(BASE_DIR, "usuario/templates") |
---|
114 | |
---|
115 | ## Directorio en donde se encuentran las plantillas de gestión de información |
---|
116 | GESTION_INFORMACION_TEMPLATES = os.path.join(BASE_DIR, "gestion_informacion/templates") |
---|
117 | |
---|
118 | TEMPLATES = [ |
---|
119 | { |
---|
120 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', |
---|
121 | 'DIRS': [ |
---|
122 | ROOT_TEMPLATES, BASE_TEMPLATES, ECONOMICO_TEMPLATES, PRODUCTIVO_TEMPLATES, USUARIO_TEMPLATES, |
---|
123 | GESTION_INFORMACION_TEMPLATES |
---|
124 | ], |
---|
125 | 'APP_DIRS': True, |
---|
126 | 'OPTIONS': { |
---|
127 | 'context_processors': [ |
---|
128 | 'django.template.context_processors.debug', |
---|
129 | 'django.template.context_processors.request', |
---|
130 | 'django.contrib.auth.context_processors.auth', |
---|
131 | 'django.contrib.messages.context_processors.messages', |
---|
132 | 'django.template.context_processors.i18n', |
---|
133 | "django.template.context_processors.tz", |
---|
134 | ], |
---|
135 | 'libraries': { # Carga los paquetes de bibliotecas para los templatetags, etc... |
---|
136 | 'productivo_filtros': 'productivo.templatetags.productivo_filtros', |
---|
137 | }, |
---|
138 | }, |
---|
139 | }, |
---|
140 | ] |
---|
141 | |
---|
142 | ## Configuración para el wsgi de la aplicación |
---|
143 | WSGI_APPLICATION = 'seiven.wsgi.application' |
---|
144 | |
---|
145 | ## Configuración de la(s) base(s) de dato(s) del sistema |
---|
146 | DATABASES = DATABASES_CONFIG |
---|
147 | |
---|
148 | ## Configuración para las validaciones de contraseñas |
---|
149 | AUTH_PASSWORD_VALIDATORS = [ |
---|
150 | { |
---|
151 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', |
---|
152 | }, |
---|
153 | { |
---|
154 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', |
---|
155 | 'OPTIONS': { |
---|
156 | 'min_length': 8, |
---|
157 | } |
---|
158 | }, |
---|
159 | { |
---|
160 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', |
---|
161 | }, |
---|
162 | { |
---|
163 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', |
---|
164 | }, |
---|
165 | ] |
---|
166 | |
---|
167 | |
---|
168 | ## Configuración del código del lenguaje a utilizar por defecto |
---|
169 | LANGUAGE_CODE = 'es-ve' |
---|
170 | |
---|
171 | ## Configuración para el nombre de localización por defecto |
---|
172 | LOCALE_NAME = 'es' |
---|
173 | |
---|
174 | ## Configuración para la zona horaria por defecto |
---|
175 | TIME_ZONE = 'America/Caracas' |
---|
176 | |
---|
177 | ## Determina si se emplea la internacionalización I18N |
---|
178 | USE_I18N = True |
---|
179 | |
---|
180 | ## Determina si se emplea la internacionalización L10N |
---|
181 | USE_L10N = True |
---|
182 | |
---|
183 | ## Determina si se emplea la zona horaria |
---|
184 | USE_TZ = False |
---|
185 | |
---|
186 | ## Configuración de la raíz donde se encuentran los archivos estaticos del sistema (para entornos en producción) |
---|
187 | STATIC_ROOT = '' |
---|
188 | |
---|
189 | ## Configuración de la url que atenderá las peticiones de los archivos estáticos del sistema |
---|
190 | STATIC_URL = '/static/' |
---|
191 | |
---|
192 | ## Configuración de los directorios en donde se encuentran los archivos estáticos |
---|
193 | STATICFILES_DIRS = ( |
---|
194 | os.path.join(BASE_DIR, 'static/'), |
---|
195 | ) |
---|
196 | |
---|
197 | ## URL de acceso al sistema |
---|
198 | LOGIN_URL = "/login" |
---|
199 | |
---|
200 | ## URL de salida del sistema |
---|
201 | LOGOUT_URL = "/logout" |
---|
202 | |
---|
203 | ## configuración que permite obtener la ruta en donde se encuentran las traducciones de la aplicación a otros lenguajes |
---|
204 | LOCALE_PATHS = [ |
---|
205 | #os.path.join(BASE_DIR, 'locale'), |
---|
206 | ] |
---|
207 | |
---|
208 | ## Registro de mensajes al usuario |
---|
209 | MESSAGE_STORAGE = 'django.contrib.messages.storage.cookie.CookieStorage' |
---|
210 | |
---|
211 | # Configuración de variables para el envío de correo electrónico |
---|
212 | ## Nombre del Servidor de correo SMTP |
---|
213 | EMAIL_HOST = 'localhost' |
---|
214 | ## Puerto del Servidor de correo SMTP |
---|
215 | EMAIL_PORT = 25 |
---|
216 | ## Dirección de correo electrónico de quien envía |
---|
217 | EMAIL_FROM = 'seiven@cenditel.gob.ve' |
---|
218 | |
---|
219 | ## Registro de vitácoras de errores (logs) |
---|
220 | LOGS_PATH = '' |
---|
221 | |
---|
222 | ## Ruta en la que se guardan los archivos para la gestión de información |
---|
223 | GESTION_INFORMACION_FILES = os.path.join(BASE_DIR, "static/files") |
---|
224 | |
---|
225 | ## Configuración de los niveles de vitácoras (logs) a registrar |
---|
226 | LOGGING = dict(version=1, disable_existing_loggers=True, formatters={ |
---|
227 | 'std': { |
---|
228 | 'format': '%(asctime)s %(levelname)-8s [modulo: %(module)s, funcion: %(funcName)s, linea: %(lineno)d]. %(message)s', |
---|
229 | } |
---|
230 | }, handlers={ |
---|
231 | 'null': { |
---|
232 | 'level': 'DEBUG', |
---|
233 | 'class': 'logging.NullHandler' |
---|
234 | }, |
---|
235 | 'base': { |
---|
236 | 'class': 'logging.handlers.TimedRotatingFileHandler', |
---|
237 | 'level': 'DEBUG', |
---|
238 | 'formatter': 'std', |
---|
239 | 'filename': os.path.join(LOGS_PATH, 'base.log'), |
---|
240 | 'when': 'w6', |
---|
241 | 'interval': 1, |
---|
242 | 'backupCount': 52 |
---|
243 | }, |
---|
244 | 'economico': { |
---|
245 | 'class': 'logging.handlers.TimedRotatingFileHandler', |
---|
246 | 'level': 'DEBUG', |
---|
247 | 'formatter': 'std', |
---|
248 | 'filename': os.path.join(LOGS_PATH, 'economico.log'), |
---|
249 | 'when': 'w6', |
---|
250 | 'interval': 1, |
---|
251 | 'backupCount': 52 |
---|
252 | }, |
---|
253 | 'productivo': { |
---|
254 | 'class': 'logging.handlers.TimedRotatingFileHandler', |
---|
255 | 'level': 'DEBUG', |
---|
256 | 'formatter': 'std', |
---|
257 | 'filename': os.path.join(LOGS_PATH, 'productivo.log'), |
---|
258 | 'when': 'w6', |
---|
259 | 'interval': 1, |
---|
260 | 'backupCount': 52 |
---|
261 | }, |
---|
262 | 'usuario': { |
---|
263 | 'class': 'logging.handlers.TimedRotatingFileHandler', |
---|
264 | 'level': 'DEBUG', |
---|
265 | 'formatter': 'std', |
---|
266 | 'filename': os.path.join(LOGS_PATH, 'usuario.log'), |
---|
267 | 'when': 'w6', |
---|
268 | 'interval': 1, |
---|
269 | 'backupCount': 52 |
---|
270 | }, |
---|
271 | 'carga_masiva': { |
---|
272 | 'class': 'logging.handlers.TimedRotatingFileHandler', |
---|
273 | 'level': 'DEBUG', |
---|
274 | 'formatter': 'std', |
---|
275 | 'filename': os.path.join(LOGS_PATH, 'carga_masiva.log'), |
---|
276 | 'when': 'w6', |
---|
277 | 'interval': 1, |
---|
278 | 'backupCount': 52 |
---|
279 | }, |
---|
280 | }, loggers={ |
---|
281 | 'root': { |
---|
282 | 'level': 'DEBUG', |
---|
283 | 'handlers': ['usuario'] |
---|
284 | }, |
---|
285 | 'base': { |
---|
286 | 'level': 'DEBUG', |
---|
287 | 'handlers': ['base'], |
---|
288 | 'qualname': 'base' |
---|
289 | }, |
---|
290 | 'economico': { |
---|
291 | 'level': 'DEBUG', |
---|
292 | 'handlers': ['economico'], |
---|
293 | 'qualname': 'economico' |
---|
294 | }, |
---|
295 | 'productivo': { |
---|
296 | 'level': 'DEBUG', |
---|
297 | 'handlers': ['productivo'], |
---|
298 | 'qualname': 'productivo' |
---|
299 | }, |
---|
300 | 'usuario': { |
---|
301 | 'level': 'DEBUG', |
---|
302 | 'handlers': ['usuario'], |
---|
303 | 'qualname': 'usuario' |
---|
304 | }, |
---|
305 | 'carga_masiva': { |
---|
306 | 'level': 'DEBUG', |
---|
307 | 'handlers': ['carga_masiva'], |
---|
308 | 'qualname': 'carga_masiva' |
---|
309 | }, |
---|
310 | 'django.request': { |
---|
311 | 'handlers': ['null'], |
---|
312 | 'level': 'ERROR', |
---|
313 | 'propagate': False, |
---|
314 | } |
---|
315 | }) |
---|
316 | |
---|
317 | # Configuración del CAPTCHA |
---|
318 | ## Ruta en donde se encuentra el diccionario de palabras a utilizar en la generación del captcha |
---|
319 | CAPTCHA_WORDS_DICTIONARY = os.path.join(BASE_DIR, "static/dictionaries/captcha-es.txt") |
---|
320 | ## Establece el tipo de captcha a generar. Se establece a la extraccion de palabras a partir de un diccionario |
---|
321 | CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.word_challenge' |
---|
322 | ## Longitud de carácteres a mostrar en la imagen del captcha |
---|
323 | CAPTCHA_LENGTH = 6 |
---|
324 | ## Longitud de carácteres máxima permitida para extraer del diccionario |
---|
325 | CAPTCHA_DICTIONARY_MAX_LENGTH = 6 |
---|
326 | ## Longitud de carácteres mínima permitida para extraer del diccionario |
---|
327 | CAPTCHA_DICTIONARY_MIN_LENGTH = 4 |
---|
328 | ## Color de fondo para la imagen del captcha |
---|
329 | CAPTCHA_BACKGROUND_COLOR = '#337AB7' |
---|
330 | ## Color de la fuente para la imagen del captcha |
---|
331 | CAPTCHA_FOREGROUND_COLOR = '#FFF' |
---|
332 | |
---|
333 | if DEBUG: |
---|
334 | ## Si se encuentra en modo de desarrollo, la imagen de captcha no es requerida |
---|
335 | CAPTCHA_TEST_MODE = True |
---|
336 | |
---|
337 | ## Elimina la imagen de ruido en el fondo del captcha cuando la aplicacion se encuentra en modo desarrollo |
---|
338 | CAPTCHA_NOISE_FUNCTIONS = ('captcha.helpers.noise_null',) |
---|
339 | |
---|
340 | ## Tiempo de expiración del captcha en entornos de desarrollo, representado en minutos |
---|
341 | CAPTCHA_TIMEOUT = 1440 # 24 horas |
---|
342 | |
---|
343 | ## Configura el backend para el envío de correo electrónico para mostrarlo en consola, solo en entorno de desarrollo |
---|
344 | EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' |
---|