1ee126a69f
- settings: ALLOWED_HOSTS y CSRF_TRUSTED_ORIGINS a nightspire.gg / www.nightspire.gg (+ IP del servidor). Se retira el antiguo novawow.com. - WhiteNoise para servir estáticos desde gunicorn (el reverse proxy Caddy corre como usuario 'caddy' y no puede leer /root): middleware + STORAGES con CompressedStaticFilesStorage. Añadido a requirements.txt. - home: get_online_characters_count() ahora tolera que la BD de personajes (AzerothCore) no exista/esté vacía y devuelve 0 en vez de provocar un 500 en la portada (mismo criterio que el context_processor get_server_info). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
93 lines
3.7 KiB
Python
93 lines
3.7 KiB
Python
from ._base import *
|
|
|
|
|
|
def get_online_characters_count():
|
|
# Si la BD de personajes (AzerothCore) aún no está disponible/poblada,
|
|
# no rompemos la portada: devolvemos 0 como hace el context_processor.
|
|
try:
|
|
with connections['acore_characters'].cursor() as cursor:
|
|
cursor.execute("SELECT COUNT(*) FROM characters WHERE online = 1")
|
|
result = cursor.fetchone()
|
|
return result[0] if result else 0
|
|
except Exception as e:
|
|
logger.warning("No se pudo contar personajes en línea: %s", e)
|
|
return 0
|
|
def check_server_status(host, port):
|
|
if not host or host == "N/A":
|
|
return False
|
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
s.settimeout(1)
|
|
try:
|
|
s.connect((host, port))
|
|
s.close()
|
|
return True
|
|
except (socket.timeout, ConnectionRefusedError, socket.gaierror):
|
|
return False
|
|
def home_view(request):
|
|
noticias = Noticia.objects.order_by('-fecha_publicacion')[:50]
|
|
online_characters = get_online_characters_count()
|
|
server_selection = ServerSelection.objects.first()
|
|
status = check_server_status(server_selection.address, server_selection.port) if server_selection else None
|
|
game_version = 'WotLK' if server_selection and server_selection.gamebuild == 12340 else 'Cataclysm'
|
|
|
|
context = {
|
|
'noticias': noticias,
|
|
'server': server_selection,
|
|
'status': 'Online' if status else 'Offline',
|
|
'expansion': game_version,
|
|
'online_characters': online_characters,
|
|
}
|
|
return render(request, 'home/home.html', context)
|
|
def download_client_view(request):
|
|
download_content = DownloadClientPage.objects.first()
|
|
categorias = ClienteCategoria.objects.all()
|
|
return render(request, 'download/download_client.html', {
|
|
'download_content': download_content,
|
|
'categorias': categorias,
|
|
})
|
|
def download_addons_view(request):
|
|
return redirect("https://foro.novawow.com/files/")
|
|
def content_creators_view(request):
|
|
content_creator = ContentCreator.objects.first()
|
|
return render(request, 'community/content_creators.html', {'content_creator': content_creator})
|
|
def server_status_view(request):
|
|
server_selection = ServerSelection.objects.first()
|
|
if server_selection:
|
|
status = check_server_status(server_selection.address, server_selection.port)
|
|
game_version = 'WotLK' if server_selection.gamebuild == 12340 else 'Cataclysm'
|
|
else:
|
|
status = None
|
|
game_version = None
|
|
|
|
return render(request, 'server_status/server_status.html', {
|
|
'server': server_selection,
|
|
'status': 'Online' if status else 'Offline',
|
|
'game_version': game_version,
|
|
})
|
|
def novawow_realm_view(request):
|
|
return render(request, 'realms/novawow_realm.html')
|
|
def contact_us_view(request):
|
|
return render(request, 'contact/contact_us.html')
|
|
def legal_notice_view(request):
|
|
return render(request, 'legal/legal_notice.html')
|
|
def maintenance_view(request):
|
|
return render(request, 'maintenance/maintenance.html')
|
|
def not_found(request, exception=None):
|
|
return render(request, '404.html', status=404)
|
|
def terms_and_conditions_view(request):
|
|
return render(request, 'legal/terms_and_conditions.html')
|
|
def privacy_policy_view(request):
|
|
return render(request, 'legal/privacy_policy.html')
|
|
def refund_policy_view(request):
|
|
return render(request, 'legal/refund_policy.html')
|
|
def cookies_view(request):
|
|
return render(request, 'legal/cookies.html')
|
|
def help_view(request):
|
|
# Verificar si el usuario está logueado
|
|
if 'username' not in request.session:
|
|
# Si no está logueado, redirigir al inicio de sesión
|
|
return redirect('index')
|
|
|
|
# Si está logueado, renderizar la página de ayuda
|
|
return render(request, 'community/help.html')
|