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
readydo seuapps.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
listeretrieveem 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:
src/tests/ - Exemplo de template:
src/tests/templates/cached_template.html
Autor
Alan Gomes (alan.gomes.ag28@gmail.com)
Licença
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file django_smart_cache-0.1.1.tar.gz.
File metadata
- Download URL: django_smart_cache-0.1.1.tar.gz
- Upload date:
- Size: 15.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d717ab722742b6e6583f65b71f7a3c062c54a0d6727e088ad539aebd5b90af76
|
|
| MD5 |
f90353097a8524ec0457b981f8e6e802
|
|
| BLAKE2b-256 |
b82845c5c234b7109c8c28ef5db3210b4174de5f3475180d55fcdb4684e10ac6
|
File details
Details for the file django_smart_cache-0.1.1-py3-none-any.whl.
File metadata
- Download URL: django_smart_cache-0.1.1-py3-none-any.whl
- Upload date:
- Size: 6.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
069fc9a176a8d0f2817ffcc74df023479b2e4551ad156b75c177d85565232b42
|
|
| MD5 |
bf60b37500fb24ac511939b99c4e1782
|
|
| BLAKE2b-256 |
05662309260fbf6c719f1c89d88534056fe1f29a92d4e7c8dda3ef8b70d7c42b
|