Browse Source

Add AnonCachePageMixin to 8 public search/filter views

Caches anonymous responses for 120 s (PAGE_CACHE_TTL_LIST), bypasses
cache for authenticated users so CSRF tokens and edit controls stay fresh.
Migrates PesquisarSessaoPlenariaView from cache_page (all-users) to
AnonCachePageMixin for consistency.

Views covered: PesquisarParlamentarView, PesquisarColigacaoView,
PesquisarPartidoView, PesquisarStatusTramitacaoView,
MateriaLegislativaPesquisaView, PesquisarAssuntoNormaView,
NormaPesquisaView, PesquisarSessaoPlenariaView.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
rate-limiter-2026
Edward Ribeiro 1 week ago
parent
commit
38fa24112d
  1. 4
      sapl/materia/views.py
  2. 5
      sapl/norma/views.py
  3. 6
      sapl/parlamentares/views.py
  4. 4
      sapl/sessao/views.py

4
sapl/materia/views.py

@ -358,7 +358,7 @@ class StatusTramitacaoCrud(CrudAux):
rate=smart_rate,
block=True),
name='dispatch')
class PesquisarStatusTramitacaoView(FilterView):
class PesquisarStatusTramitacaoView(AnonCachePageMixin, FilterView):
model = StatusTramitacao
filterset_class = StatusTramitacaoFilterSet
paginate_by = 20
@ -2023,7 +2023,7 @@ class AcompanhamentoExcluirView(TemplateView):
rate=smart_rate,
block=True),
name='dispatch')
class MateriaLegislativaPesquisaView(MultiFormatOutputMixin, FilterView):
class MateriaLegislativaPesquisaView(AnonCachePageMixin, MultiFormatOutputMixin, FilterView):
model = MateriaLegislativa
filterset_class = MateriaLegislativaFilterSet
paginate_by = 50

5
sapl/norma/views.py

@ -32,6 +32,7 @@ from sapl.crud.base import (RP_DETAIL, RP_LIST, Crud, CrudAux,
MasterDetailCrud, make_pagination)
from sapl.materia.models import Orgao
from sapl.middleware.ratelimit import get_client_ip, smart_key, smart_rate
from sapl.middleware.page_cache import AnonCachePageMixin
from sapl.utils import show_results_filter_set, \
sapn_is_enabled, MultiFormatOutputMixin
@ -66,7 +67,7 @@ class AssuntoNormaCrud(CrudAux):
rate=smart_rate,
block=True),
name='dispatch')
class PesquisarAssuntoNormaView(FilterView):
class PesquisarAssuntoNormaView(AnonCachePageMixin, FilterView):
model = AssuntoNorma
filterset_class = AssuntoNormaFilterSet
paginate_by = 20
@ -157,7 +158,7 @@ class NormaRelacionadaCrud(MasterDetailCrud):
rate=smart_rate,
block=True),
name='dispatch')
class NormaPesquisaView(MultiFormatOutputMixin, FilterView):
class NormaPesquisaView(AnonCachePageMixin, MultiFormatOutputMixin, FilterView):
model = NormaJuridica
filterset_class = NormaFilterSet
paginate_by = 50

6
sapl/parlamentares/views.py

@ -194,7 +194,7 @@ class ProposicaoParlamentarCrud(CrudBaseForListAndDetailExternalAppView):
rate=smart_rate,
block=True),
name='dispatch')
class PesquisarParlamentarView(FilterView):
class PesquisarParlamentarView(AnonCachePageMixin, FilterView):
model = Parlamentar
filterset_class = ParlamentarFilterSet
paginate_by = 20
@ -258,7 +258,7 @@ class PesquisarParlamentarView(FilterView):
rate=smart_rate,
block=True),
name='dispatch')
class PesquisarColigacaoView(FilterView):
class PesquisarColigacaoView(AnonCachePageMixin, FilterView):
model = Coligacao
filterset_class = ColigacaoFilterSet
paginate_by = 20
@ -316,7 +316,7 @@ class PesquisarColigacaoView(FilterView):
rate=smart_rate,
block=True),
name='dispatch')
class PesquisarPartidoView(FilterView):
class PesquisarPartidoView(AnonCachePageMixin, FilterView):
model = Partido
filterset_class = PartidoFilterSet
paginate_by = 20

4
sapl/sessao/views.py

@ -20,7 +20,6 @@ from django.utils.decorators import method_decorator
from django.utils.encoding import force_text
from django.utils.html import strip_tags
from django.utils.translation import ugettext_lazy as _
from django.views.decorators.cache import cache_page
from django.views.decorators.csrf import csrf_exempt
from django.views.generic import (FormView, ListView, TemplateView)
from django.views.generic.base import RedirectView
@ -4086,8 +4085,7 @@ class PautaSessaoDetailView(PautaMultiFormatOutputMixin, DetailView):
rate=smart_rate,
block=True),
name='dispatch')
@method_decorator(cache_page(60 * 2), name='get')
class PesquisarSessaoPlenariaView(MultiFormatOutputMixin, FilterView):
class PesquisarSessaoPlenariaView(AnonCachePageMixin, MultiFormatOutputMixin, FilterView):
model = SessaoPlenaria
filterset_class = SessaoPlenariaFilterSet
paginate_by = 10

Loading…
Cancel
Save