Django + DRF + Redis + Firebase

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.

Deixe um comentário