Browse Source

Corrige polling excessivo em /voto-individual/

- Adiciona @login_required em votante_view para que usuários
  anônimos sejam redirecionados ao login em vez de receberem o
  template com auto-reload.
- Corrige bug do relógio: setInterval recursivo dentro de
  startTime() acumulava timers exponencialmente. Trocado por
  setTimeout, mantendo apenas um timer pendente.
- Move o script de reload/relógio para dentro do bloco
  {% if not error_message %} para que a variante de erro não
  agende reloads de 30s.

Reduz drasticamente o volume de requisições que disparavam o
rate limiter (RATE_LIMITER_RATE=35/m) quando vários parlamentares
mantinham a tela aberta atrás do mesmo IP NAT.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
pull/3831/head
joao 19 hours ago
parent
commit
1fc9f7887c
  1. 3
      sapl/painel/views.py
  2. 4
      sapl/templates/painel/voto_individual.html

3
sapl/painel/views.py

@ -3,7 +3,7 @@ import json
import logging import logging
from django.contrib import messages from django.contrib import messages
from django.contrib.auth.decorators import user_passes_test from django.contrib.auth.decorators import login_required, user_passes_test
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.urls import reverse from django.urls import reverse
from django.db.models import Q from django.db.models import Q
@ -199,6 +199,7 @@ def can_vote(context, context_vars, request):
return context, context_vars return context, context_vars
@login_required
def votante_view(request): def votante_view(request):
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
username = request.user.username if request.user.is_authenticated else 'AnonymousUser' username = request.user.username if request.user.is_authenticated else 'AnonymousUser'

4
sapl/templates/painel/voto_individual.html

@ -127,6 +127,7 @@
</body> </body>
</html> </html>
{% if not error_message %}
{% render_chunk_vendors 'js' %} {% render_chunk_vendors 'js' %}
{% render_bundle 'global' 'js' %} {% render_bundle 'global' 'js' %}
{% render_bundle 'painel' 'js' %} {% render_bundle 'painel' 'js' %}
@ -174,7 +175,7 @@
m = checkTime(m); m = checkTime(m);
s = checkTime(s); s = checkTime(s);
$("#relogio").text(h+":"+m+":"+s) $("#relogio").text(h+":"+m+":"+s)
var t = setInterval(() => startTime(), 500); var t = setTimeout(() => startTime(), 500);
} }
$(document).ready(function(){ $(document).ready(function(){
@ -190,3 +191,4 @@
}); });
</script> </script>
{% endif %}

Loading…
Cancel
Save