feat: included 2FA and lots of feature from django-htmx-template
CI / test (push) Successful in 2m13s
CI / build (push) Successful in 55s

This commit is contained in:
2026-09-16 13:20:44 +02:00
parent db21129960
commit 4b0d404116
52 changed files with 3135 additions and 311 deletions
+37
View File
@@ -35,6 +35,13 @@ AWS_ACCESS_KEY_ID = env.str('S3_ACCESS_KEY_ID', '')
AWS_SECRET_ACCESS_KEY = env.str('S3_SECRET_ACCESS_KEY', '')
AWS_STORAGE_BUCKET_NAME = env.str('S3_STORAGE_BUCKET_NAME', '')
AWS_S3_ENDPOINT_URL = env.str('S3_ENDPOINT_URL', '')
# Compatibilidad con Garage (ver docker-compose.yml/garage.toml, S3
# self-hosted para desarrollo local): a diferencia de AWS S3, exige indicar
# la región a mano y no soporta el estilo de direccionamiento "virtual"
# (bucket como subdominio) por defecto.
AWS_S3_REGION_NAME = env.str('S3_REGION_NAME', '')
AWS_S3_USE_SSL = env.bool('S3_USE_SSL', True)
AWS_S3_ADDRESSING_STYLE = env.str('S3_ADDRESSING_STYLE', 'auto')
ITEMS_PER_PAGE = env.int('ITEMS_PER_PAGE', 20)
@@ -49,4 +56,34 @@ DEFAULT_FROM_EMAIL = env.str('DEFAULT_FROM_EMAIL', 'webmaster@localhost')
# EmailUpdateForm) por si el cambio no lo ha hecho él.
SUPPORT_EMAIL = env.str('SUPPORT_EMAIL', 'soporte@localhost')
# Nombre mostrado en el navbar, el <title> y los emails de aviso de la
# cuenta (ver EmailUpdateForm/StyledPasswordChangeForm/AccountDeleteForm).
SITE_NAME = env.str('SITE_NAME', 'Crochet')
LOG_LEVEL = env.str('LOG_LEVEL', 'INFO')
# Limitación de peticiones (ver crochet/views.py: login, registro,
# recuperación de contraseña y verificación en dos pasos) con
# django-ratelimit. Usa el cache framework de Django (settings.CACHES,
# "default" por defecto: LocMemCache si no se configura otra cosa) para
# contar peticiones; LocMemCache es propio de cada proceso, así que con
# más de un worker/instancia en producción el límite real es "por
# proceso", no global — configura ahí un backend compartido (Redis,
# Memcached) si eso te importa.
RATELIMIT_ENABLE = env.bool('RATELIMIT_ENABLE', True)
# Cabeceras/cookies de seguridad para servir por HTTPS en producción. Todo
# esto viene desactivado por defecto porque en desarrollo local se sirve
# por HTTP plano (activarlo ahí dejaría la app inaccesible o el navegador
# descartando las cookies de sesión/CSRF). Actívalo en el .env de
# producción una vez la app esté detrás de HTTPS de verdad.
SECURE_SSL_REDIRECT = env.bool('SECURE_SSL_REDIRECT', False)
SESSION_COOKIE_SECURE = env.bool('SESSION_COOKIE_SECURE', False)
CSRF_COOKIE_SECURE = env.bool('CSRF_COOKIE_SECURE', False)
# En segundos; 0 desactiva HSTS. Empieza bajo (p. ej. 3600) para probar en
# producción antes de subirlo a un valor largo (p. ej. 31536000 = 1 año):
# un valor largo con la configuración equivocada deja el dominio
# inaccesible por HTTPS durante ese tiempo para quien ya lo haya recibido.
SECURE_HSTS_SECONDS = env.int('SECURE_HSTS_SECONDS', 0)
SECURE_HSTS_INCLUDE_SUBDOMAINS = env.bool('SECURE_HSTS_INCLUDE_SUBDOMAINS', False)
SECURE_HSTS_PRELOAD = env.bool('SECURE_HSTS_PRELOAD', False)