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 a los administradores del sistema |
---|
37 | ADMINS = [] |
---|
38 | |
---|
39 | ## Listado de aplicaciones base del sistema |
---|
40 | PREREQ_APPS = [ |
---|
41 | 'django.contrib.admin', |
---|
42 | 'django.contrib.auth', |
---|
43 | 'django.contrib.contenttypes', |
---|
44 | 'django.contrib.sessions', |
---|
45 | 'django.contrib.messages', |
---|
46 | 'django.contrib.staticfiles', |
---|
47 | 'captcha', |
---|
48 | ] |
---|
49 | |
---|
50 | if DEBUG: |
---|
51 | ## Aplicaciones requeridas para entornos de desarrollo |
---|
52 | PREREQ_APPS += [ |
---|
53 | 'django_extensions', |
---|
54 | 'debug_toolbar', |
---|
55 | 'sslserver', # Aplicación para ejecutar un servidor de desarrollo bajo el protocolo https |
---|
56 | ] |
---|
57 | |
---|
58 | ## Configuracion de parametros de django-debug-toolbar |
---|
59 | JQUERY_URL = '' |
---|
60 | |
---|
61 | ## Listado de aplicaciones del projecto |
---|
62 | PROJECT_APPS = [ |
---|
63 | 'base', |
---|
64 | 'usuario' |
---|
65 | ] |
---|
66 | |
---|
67 | ## Listado de aplicaciones cargadas por el sistema |
---|
68 | INSTALLED_APPS = PREREQ_APPS + PROJECT_APPS |
---|
69 | |
---|
70 | |
---|
71 | MIDDLEWARE_CLASSES = [ |
---|
72 | 'django.middleware.security.SecurityMiddleware', |
---|
73 | 'django.contrib.sessions.middleware.SessionMiddleware', |
---|
74 | 'django.middleware.locale.LocaleMiddleware', |
---|
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 | ] |
---|
82 | |
---|
83 | if DEBUG: |
---|
84 | MIDDLEWARE_CLASSES += [ |
---|
85 | 'debug_toolbar.middleware.DebugToolbarMiddleware', |
---|
86 | ] |
---|
87 | |
---|
88 | ## Configuración de las URL del sistema |
---|
89 | ROOT_URLCONF = 'seiven.urls' |
---|
90 | |
---|
91 | ## Directorio en donde se encuentran las plantillas en el root de la aplicación |
---|
92 | ROOT_TEMPLATES = os.path.join(BASE_DIR, "templates") |
---|
93 | |
---|
94 | ## Directorio en donde se encuentran las plantillas del módulo base |
---|
95 | BASE_TEMPLATES = os.path.join(BASE_DIR, "base/templates") |
---|
96 | |
---|
97 | ## Directorio en donde se encuentran las plantillas del módulo económico |
---|
98 | ECONOMICO_TEMPLATES = os.path.join(BASE_DIR, "economico/templates") |
---|
99 | |
---|
100 | ## Directorio en donde se encuentran las plantillas del módulo de usuarios |
---|
101 | USUARIO_TEMPLATES = os.path.join(BASE_DIR, "usuario/templates") |
---|
102 | |
---|
103 | TEMPLATES = [ |
---|
104 | { |
---|
105 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', |
---|
106 | 'DIRS': [ROOT_TEMPLATES, BASE_TEMPLATES, ECONOMICO_TEMPLATES, USUARIO_TEMPLATES], |
---|
107 | 'APP_DIRS': True, |
---|
108 | 'OPTIONS': { |
---|
109 | 'context_processors': [ |
---|
110 | 'django.template.context_processors.debug', |
---|
111 | 'django.template.context_processors.request', |
---|
112 | 'django.contrib.auth.context_processors.auth', |
---|
113 | 'django.contrib.messages.context_processors.messages', |
---|
114 | 'django.template.context_processors.i18n', |
---|
115 | "django.template.context_processors.tz", |
---|
116 | ], |
---|
117 | }, |
---|
118 | }, |
---|
119 | ] |
---|
120 | |
---|
121 | ## Configuración para el wsgi de la aplicación |
---|
122 | WSGI_APPLICATION = 'seiven.wsgi.application' |
---|
123 | |
---|
124 | ## Configuración de la(s) base(s) de dato(s) del sistema |
---|
125 | DATABASES = DATABASES_CONFIG |
---|
126 | |
---|
127 | ## Configuración para las validaciones de contraseñas |
---|
128 | AUTH_PASSWORD_VALIDATORS = [ |
---|
129 | { |
---|
130 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', |
---|
131 | }, |
---|
132 | { |
---|
133 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', |
---|
134 | 'OPTIONS': { |
---|
135 | 'min_length': 8, |
---|
136 | } |
---|
137 | }, |
---|
138 | { |
---|
139 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', |
---|
140 | }, |
---|
141 | { |
---|
142 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', |
---|
143 | }, |
---|
144 | ] |
---|
145 | |
---|
146 | |
---|
147 | ## Configuración del código del lenguaje a utilizar por defecto |
---|
148 | LANGUAGE_CODE = 'es-ve' |
---|
149 | |
---|
150 | ## Configuración para el nombre de localización por defecto |
---|
151 | LOCALE_NAME = 'es' |
---|
152 | |
---|
153 | ## Configuración para la zona horaria por defecto |
---|
154 | TIME_ZONE = 'America/Caracas' |
---|
155 | |
---|
156 | ## Determina si se emplea la internacionalización I18N |
---|
157 | USE_I18N = True |
---|
158 | |
---|
159 | ## Determina si se emplea la internacionalización L10N |
---|
160 | USE_L10N = True |
---|
161 | |
---|
162 | ## Determina si se emplea la zona horaria |
---|
163 | USE_TZ = True |
---|
164 | |
---|
165 | ## Configuración de la raíz donde se encuentran los archivos estaticos del sistema (para entornos en producción) |
---|
166 | STATIC_ROOT = '' |
---|
167 | |
---|
168 | ## Configuración de la url que atenderá las peticiones de los archivos estáticos del sistema |
---|
169 | STATIC_URL = '/static/' |
---|
170 | |
---|
171 | ## Configuración de los directorios en donde se encuentran los archivos estáticos |
---|
172 | STATICFILES_DIRS = ( |
---|
173 | os.path.join(BASE_DIR, 'static/'), |
---|
174 | ) |
---|
175 | |
---|
176 | ## URL de acceso al sistema |
---|
177 | LOGIN_URL = "/login" |
---|
178 | |
---|
179 | ## URL de salida del sistema |
---|
180 | LOGOUT_URL = "/logout" |
---|
181 | |
---|
182 | ## configuración que permite obtener la ruta en donde se encuentran las traducciones de la aplicación a otros lenguajes |
---|
183 | LOCALE_PATHS = [ |
---|
184 | #os.path.join(BASE_DIR, 'locale'), |
---|
185 | ] |
---|
186 | |
---|
187 | ## Registro de mensajes al usuario |
---|
188 | MESSAGE_STORAGE = 'django.contrib.messages.storage.cookie.CookieStorage' |
---|
189 | |
---|
190 | # Configuración de variables para el envío de correo electrónico |
---|
191 | ## Nombre del Servidor de correo SMTP |
---|
192 | EMAIL_HOST = 'localhost' |
---|
193 | ## Puerto del Servidor de correo SMTP |
---|
194 | EMAIL_PORT = 25 |
---|
195 | ## Dirección de correo electrónico de quien envía |
---|
196 | EMAIL_FROM = 'seiven@cenditel.gob.ve' |
---|
197 | |
---|
198 | ## Registro de vitácoras de errores (logs) |
---|
199 | LOGS_PATH = '/var/log/seiven' |
---|
200 | |
---|
201 | ## Configuración de los niveles de vitácoras (logs) a registrar |
---|
202 | LOGGING = dict(version=1, disable_existing_loggers=True, formatters={ |
---|
203 | 'std': { |
---|
204 | 'format': '%(asctime)s %(levelname)-8s [modulo: %(module)s, funcion: %(funcName)s, linea: %(lineno)d]. %(message)s', |
---|
205 | } |
---|
206 | }, handlers={ |
---|
207 | 'null': { |
---|
208 | 'level': 'DEBUG', |
---|
209 | 'class': 'logging.NullHandler' |
---|
210 | }, |
---|
211 | 'base': { |
---|
212 | 'class': 'logging.handlers.TimedRotatingFileHandler', |
---|
213 | 'level': 'DEBUG', |
---|
214 | 'formatter': 'std', |
---|
215 | 'filename': os.path.join(LOGS_PATH, 'base.log'), |
---|
216 | 'when': 'w6', |
---|
217 | 'interval': 1, |
---|
218 | 'backupCount': 52 |
---|
219 | }, |
---|
220 | 'economico': { |
---|
221 | 'class': 'logging.handlers.TimedRotatingFileHandler', |
---|
222 | 'level': 'DEBUG', |
---|
223 | 'formatter': 'std', |
---|
224 | 'filename': os.path.join(LOGS_PATH, 'economico.log'), |
---|
225 | 'when': 'w6', |
---|
226 | 'interval': 1, |
---|
227 | 'backupCount': 52 |
---|
228 | }, |
---|
229 | 'usuario': { |
---|
230 | 'class': 'logging.handlers.TimedRotatingFileHandler', |
---|
231 | 'level': 'DEBUG', |
---|
232 | 'formatter': 'std', |
---|
233 | 'filename': os.path.join(LOGS_PATH, 'usuario.log'), |
---|
234 | 'when': 'w6', |
---|
235 | 'interval': 1, |
---|
236 | 'backupCount': 52 |
---|
237 | }, |
---|
238 | 'carga_masiva': { |
---|
239 | 'class': 'logging.handlers.TimedRotatingFileHandler', |
---|
240 | 'level': 'DEBUG', |
---|
241 | 'formatter': 'std', |
---|
242 | 'filename': os.path.join(LOGS_PATH, 'carga_masiva.log'), |
---|
243 | 'when': 'w6', |
---|
244 | 'interval': 1, |
---|
245 | 'backupCount': 52 |
---|
246 | }, |
---|
247 | }, loggers={ |
---|
248 | 'root': { |
---|
249 | 'level': 'DEBUG', |
---|
250 | 'handlers': ['usuario'] |
---|
251 | }, |
---|
252 | 'base': { |
---|
253 | 'level': 'DEBUG', |
---|
254 | 'handlers': ['base'], |
---|
255 | 'qualname': 'base' |
---|
256 | }, |
---|
257 | 'economico': { |
---|
258 | 'level': 'DEBUG', |
---|
259 | 'handlers': ['economico'], |
---|
260 | 'qualname': 'economico' |
---|
261 | }, |
---|
262 | 'usuario': { |
---|
263 | 'level': 'DEBUG', |
---|
264 | 'handlers': ['usuario'], |
---|
265 | 'qualname': 'usuario' |
---|
266 | }, |
---|
267 | 'carga_masiva': { |
---|
268 | 'level': 'DEBUG', |
---|
269 | 'handlers': ['carga_masiva'], |
---|
270 | 'qualname': 'carga_masiva' |
---|
271 | }, |
---|
272 | 'django.request': { |
---|
273 | 'handlers': ['null'], |
---|
274 | 'level': 'ERROR', |
---|
275 | 'propagate': False, |
---|
276 | } |
---|
277 | }) |
---|
278 | |
---|
279 | # Configuración del CAPTCHA |
---|
280 | ## Ruta en donde se encuentra el diccionario de palabras a utilizar en la generación del captcha |
---|
281 | CAPTCHA_WORDS_DICTIONARY = os.path.join(BASE_DIR, "static/dictionaries/captcha-es.txt") |
---|
282 | ## Establece el tipo de captcha a generar. Se establece a la extraccion de palabras a partir de un diccionario |
---|
283 | CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.word_challenge' |
---|
284 | ## Longitud de carácteres a mostrar en la imagen del captcha |
---|
285 | CAPTCHA_LENGTH = 6 |
---|
286 | ## Longitud de carácteres máxima permitida para extraer del diccionario |
---|
287 | CAPTCHA_DICTIONARY_MAX_LENGTH = 6 |
---|
288 | ## Longitud de carácteres mínima permitida para extraer del diccionario |
---|
289 | CAPTCHA_DICTIONARY_MIN_LENGTH = 4 |
---|
290 | ## Color de fondo para la imagen del captcha |
---|
291 | CAPTCHA_BACKGROUND_COLOR = '#337AB7' |
---|
292 | ## Color de la fuente para la imagen del captcha |
---|
293 | CAPTCHA_FOREGROUND_COLOR = '#FFF' |
---|
294 | |
---|
295 | if DEBUG: |
---|
296 | ## Si se encuentra en modo de desarrollo, la imagen de captcha no es requerida |
---|
297 | CAPTCHA_TEST_MODE = True |
---|
298 | |
---|
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',) |
---|
301 | |
---|
302 | ## Tiempo de expiración del captcha en entornos de desarrollo, representado en minutos |
---|
303 | CAPTCHA_TIMEOUT = 1440 # 24 horas |
---|
304 | |
---|
305 | ## Configura el backend para el envío de correo electrónico para mostrarlo en consola, solo en entorno de desarrollo |
---|
306 | EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' |
---|