Introdução ao ModelViewSet
O Django REST Framework oferece uma forma simplificada de criar APIs RESTful através da classe ModelViewSet, que unifica operações de listagem, criação, recuperação, atualziação e exclusão de dados em uma única classe de visuailzação.
Configuração da ViewSet
Implementação da Classe de Visualização
from rest_framework import viewsets
from .models import Aluno
from .serializers import AlunoSerializer
class AlunoViewSet(viewsets.ModelViewSet):
consulta = Aluno.objects.all()
serializer_class = AlunoSerializer
A classe ModelViewSet herda de múltiplas mixins que fornecem todas as operações CRUD padrão:
- CreateModelMixin - criação de instâncias
- RetrieveModelMixin - recuperação de instâncias
- UpdateModelMixin - atualização de instâncias
- DestroyModelMixin - exclusão de instâncias
- ListModelMixin - listagem de instâncias
Configuração de Rotas Personalizadas
Definição Manual de URLs
from django.urls import path, re_path
from .views import AlunoViewSet
urlpatterns = [
path('', AlunoViewSet.as_view({
'get': 'list',
'post': 'create'
})),
re_path(r'(?P<pk>[0-9]+)/', AlunoViewSet.as_view({
'get': 'retrieve',
'put': 'update',
'patch': 'partial_update',
'delete': 'destroy'
})),
]
Esta configuração mapeia explicitamente métodos HTTP para ações específicas do ViewSet, diferenciando rotas com e sem parâmetro de chave primária.
Roteamento Automático com DefaultRouter
Configuração Simplificada de URLs
from rest_framework.routers import DefaultRouter
from django.urls import path, include
from .views import AlunoViewSet
roteador = DefaultRouter()
roteador.register('', AlunoViewSet)
urlpatterns = [
path('', include(roteador.urls)),
]
O DefaultRouter automaticamente gera todas as rotas necessárias para as operações CRUD, eliminando a necessidade de configuração manual de mapeamentos.
Fluxo de Desenvolvimento com DRF
Para criar uma API RESTful completa com Django REST Framework:
- Definir modelo de dados:
class Aluno(models.Model): - Criar serializador:
class AlunoSerializer(serializers.ModelSerializer): - Implementar ViewSet:
class AlunoViewSet(viewsets.ModelViewSet): - Configurar roteamento:
DefaultRouter().register('', AlunoViewSet)