Uma API Django servindo funcionalidades em tempo real precisa de mais do que o ORM. O Redis cuida do cache e armazenamento de sessões, o Django REST Framework estrutura a camada de API, e o Firebase fornece push em tempo real para clientes conectados.
TL;DR: Construa um backend Django completo combinando DRF para APIs REST, Redis para cache e Firebase para notificações push em tempo real.
Stack: Python, Django, Django REST Framework, Redis, Firebase Admin SDK
Nível: Avançado
Tempo de leitura: ~20 min
Setup Django + DRF
pip install Django djangorestframework
django-admin startproject meuprojeto .
django-admin startapp app
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
View DRF (padrão APIView)
from rest_framework.response import Response
from rest_framework import status
from rest_framework.views import APIView
from app.models import Platform
class PlatformView(APIView):
def get(self, request):
contents = Platform.objects.all()
result = [{"id": c.id, "name": c.name} for c in contents]
return Response(result, status=status.HTTP_200_OK)
def post(self, request):
name = request.data.get('name')
if name is None:
return Response({"message": "nome é obrigatório"}, status=status.HTTP_400_BAD_REQUEST)
obj = Platform(name=name)
obj.save()
return Response({"id": obj.id, "name": obj.name}, status=status.HTTP_200_OK)
Filtros Django
# Filtro simples por campo
Country.objects.filter(name="Brazil")
# Múltiplos campos
Country.objects.filter(name="Brazil", code2="BR")
# LIKE
Country.objects.filter(name__contains='Br')
# Via chave estrangeira
Country.objects.filter(vocabulary__main=True)
Redis: leitura e escrita
import redis
client = redis.Redis(
host="seu-redis-host.com",
port=14456,
password="sua-senha",
decode_responses=True
)
# Escrita
client.json().set('pendingUsers', '$', {"user": {"id": 1, "name": "Allan"}})
# Leitura
body = client.json().get('pendingUsers')
print(body["user"]["id"])
Firebase: banco de dados em tempo real
pip install pyrebase
import pyrebase
firebaseConfig = {
"apiKey": "SUA_API_KEY",
"authDomain": "seuapp.firebaseapp.com",
"databaseURL": "https://seuapp-default-rtdb.firebaseio.com/",
"storageBucket": "seuapp.appspot.com",
}
firebase = pyrebase.initialize_app(firebaseConfig)
database = firebase.database()
database.child("instrumentos").update({"guitarra": "ibanez"})
O que você construiu
Um backend Django com padrão de produção: endpoints REST com DRF, Redis para cache e mensageria, e Firebase para atualizações em tempo real nos clientes.
Próximos passos
- Use o Redis como backend de cache do Django (django-redis) para cachear consultas caras ao banco com expirar automático.
- Estruture as notificações Firebase com um payload de dados em vez de notification payload se quiser que o app cliente controle a exibição.
- Para envio de alta vazão, publique em uma fila Redis e processe com um worker Celery em vez de bloquear o ciclo da requisição.
Dúvidas ou feedback? Me encontre no LinkedIn ou GitHub.