Skip to main content

Biblioteca de cache incrivelmente poderosa para Django.

Project description

django-smart-cache

Biblioteca de cache inteligente e automática para Django e Django Rest Framework.

Visão Geral

O django-smart-cache oferece decorators e utilitários para adicionar cache automático em views e viewsets do Django/DRF, invalidando o cache sempre que modelos relacionados sofrem alterações. Ideal para APIs e páginas que precisam de alta performance sem perder a atualização dos dados.

  • Cache automático para views e viewsets
  • Invalidação automática ao alterar modelos relacionados
  • Suporte a autenticação (cache por usuário/token)
  • Fácil integração com projetos Django existentes

Instalação

Requisitos:

  • Python >= 3.8
  • Django == 2.2
  • djangorestframework == 3.10

Instale via pip:

pip install django-smart-cache

Configuração

Adicione django_smart_cache ao seu INSTALLED_APPS:

INSTALLED_APPS = [
    ...
    "django_smart_cache.apps.DjangoSmartCacheConfig",
]

Importante: Para que o Django reconheça os decorators de cache e mapeie corretamente as models que invalidarão o cache, é necessário importar explicitamente as views ou viewsets que utilizam os decorators dentro do método ready do seu apps.py.

Exemplo:

# myapp/apps.py
from django.apps import AppConfig


class MyAppConfig(AppConfig):
    name = "myapp"

    def ready(self):
        from myapp import views
        from myapp.api import viewsets
        ...

Configure o cache do Django normalmente (exemplo com memória local):

CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.locmem.LocMemCache",
        "LOCATION": "unique-snowflake",
    }
}

Como Usar

Cache em Viewsets (DRF)

from django_smart_cache.viewsets import cache_viewset


@cache_viewset(models=["myapp.MyModel"], timeout=60)
class MyViewSet(viewsets.ModelViewSet):
    ...
  • models: lista de modelos que, ao serem alterados, invalidam o cache.
  • timeout: tempo do cache em segundos (padrão: 900).

Cache em Views (função ou classe)

from django_smart_cache.views import cache_view


@cache_view(models=["myapp.MyModel"], timeout=60)
def minha_view(request):
    ...

Exemplo Completo

from rest_framework import viewsets, serializers
from django_smart_cache.viewsets import cache_viewset
from .models import MyModel


class MySerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel
        fields = "__all__"


@cache_viewset(models=["myapp.MyModel"], timeout=60)
class MyViewSet(viewsets.ModelViewSet):
    serializer_class = MySerializer
    queryset = MyModel.objects.all()

Funcionamento Interno

  • O decorator gera uma chave de cache única por usuário/token e parâmetros da requisição.
  • O cache é invalidado automaticamente via signals (post_save, post_delete, m2m_changed) dos modelos informados.
  • Suporta cache para métodos list e retrieve em viewsets, e qualquer view baseada em função/classe.

Testes

O projeto já inclui testes automatizados com pytest e pytest-django.

Para rodar os testes:

pytest

Desenvolvimento

  • Código-fonte: src/django_smart_cache/
  • Testes: tests/
  • Exemplo de template: tests/templates/cached_template.html

Autor

Alan Gomes (alan.gomes.ag28@gmail.com)

Licença

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_smart_cache-0.1.2.tar.gz (15.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_smart_cache-0.1.2-py3-none-any.whl (6.8 kB view details)

Uploaded Python 3

File details

Details for the file django_smart_cache-0.1.2.tar.gz.

File metadata

  • Download URL: django_smart_cache-0.1.2.tar.gz
  • Upload date:
  • Size: 15.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.6.10

File hashes

Hashes for django_smart_cache-0.1.2.tar.gz
Algorithm Hash digest
SHA256 ef5dcd3e1af125efce302beb32ed49c544731851595732843113f8e447bd3077
MD5 9ecd7b12832bc5c3d5d1ded23ed3f60d
BLAKE2b-256 6dda78ef58cf4448d90123153fb1540747699beef6965498ea2fa705cae708c5

See more details on using hashes here.

File details

Details for the file django_smart_cache-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for django_smart_cache-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2b5443bd6f62b7619295255f061c6a2d37a28c91342ebb00976449780d3654fb
MD5 ad9bdb77bfe661a46d8a4997a56d997f
BLAKE2b-256 a4679e3704b130843c1008e9f1ef9144b7ab555f5169b0a9fddc8d4d6f3efbc7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page