feat: warn user about email change
CI / test (push) Successful in 1m5s
CI / build (push) Successful in 37s

This commit is contained in:
2026-07-21 13:44:56 +02:00
parent 3e95ee2239
commit 6b5c353a86
14 changed files with 499 additions and 93 deletions
+1 -26
View File
@@ -146,9 +146,6 @@ USE_TZ = True
STATIC_URL = 'static/'
STATIC_ROOT = 'config/static'
# CompressedManifestStaticFilesStorage (WhiteNoise): sirve cada archivo ya
# comprimido (gzip/brotli) y con hash en el nombre para poder cachearlos
# "para siempre" sin arriesgarse a servir una versión vieja tras un deploy.
STORAGES = {
'default': {
'BACKEND': 'django.core.files.storage.FileSystemStorage',
@@ -161,8 +158,6 @@ STORAGES = {
if S3_ENABLED:
STORAGES['default'] = {'BACKEND': 'storages.backends.s3boto3.S3Boto3Storage'}
# Archivos subidos por el usuario (imágenes de patrón), separados de los
# estáticos del propio proyecto.
MEDIA_URL = 'media/'
MEDIA_ROOT = BASE_DIR / 'media'
@@ -173,14 +168,6 @@ EMAIL_USE_SSL = False
# Logging
# https://docs.djangoproject.com/en/6.0/topics/logging/
# Se define entero (en vez de dejar el DEFAULT_LOGGING de Django) porque ese
# default, con DEBUG=False, solo engancha un handler de consola cuando
# DEBUG=True y manda los errores (django.request) por email a ADMINS cuando
# DEBUG=False; aquí ni ADMINS ni un EMAIL_HOST de verdad están configurados
# (ver env.py), así que en producción los 500 no se veían en ningún sitio.
# Con un handler de consola sin ese filtro, cualquier error queda en
# stdout/stderr, que es lo que recogen los logs del contenedor (`docker logs`,
# lo que agregue la plataforma de despliegue, etc.).
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
@@ -196,11 +183,6 @@ LOGGING = {
'formatter': 'verbose',
},
},
# A WARNING fijo (no LOG_LEVEL): captura cualquier logger que no esté
# listado abajo (de terceros: weasyprint, whitenoise, PIL...) para que
# nada se pierda del todo, pero sin su parloteo en INFO/DEBUG -algunas
# librerías, como weasyprint, ya avisan cosas en INFO solo con
# importarlas-. 'django' y 'crochet' sí usan LOG_LEVEL, más abajo.
'root': {
'handlers': ['console'],
'level': 'WARNING',
@@ -211,11 +193,7 @@ LOGGING = {
'level': LOG_LEVEL,
'propagate': False,
},
# Aquí es donde Django registra la traza completa de cualquier
# excepción no controlada en una vista (un 500): sin esto configurado
# explícitamente, en producción (DEBUG=False) solo se intentaba
# mandar por email a ADMINS, no configurado.
'django.request': {
'django.request': {
'handlers': ['console'],
'level': 'ERROR',
'propagate': False,
@@ -225,9 +203,6 @@ LOGGING = {
'level': 'WARNING',
'propagate': False,
},
# Logger propio de la app, para poder hacer
# logging.getLogger(__name__) desde cualquier módulo de crochet/ sin
# tener que tocar esta configuración cada vez.
'crochet': {
'handlers': ['console'],
'level': LOG_LEVEL,
+4 -5
View File
@@ -45,9 +45,8 @@ EMAIL_HOST_PASSWORD = env.str('EMAIL_HOST_PASSWORD', '')
EMAIL_PORT = env.int('EMAIL_PORT', 587)
DEFAULT_FROM_EMAIL = env.str('DEFAULT_FROM_EMAIL', 'webmaster@localhost')
# Nivel de log de la app y de Django (ver LOGGING en base.py). En producción
# (DEBUG=False) Django, por defecto, solo manda los errores por email a
# ADMINS (que aquí no está configurado), así que sin un LOGGING propio no se
# ve ni un rastro de un 500 en ningún sitio; con esto van a stdout/stderr,
# que es lo que recogen los logs del contenedor.
# A dónde se remite al usuario en el aviso de cambio de email (ver
# EmailUpdateForm) por si el cambio no lo ha hecho él.
SUPPORT_EMAIL = env.str('SUPPORT_EMAIL', 'soporte@localhost')
LOG_LEVEL = env.str('LOG_LEVEL', 'INFO')