Introdução ao Django REST
Uma extensão do aplicativo Django inicial para incluir uma API RESTful usando Django REST Framework, mantendo a funcionalidade existente e adicionando endpoints API.
1. Instalação e Configuração Inicial
Primeiro, vamos instalar e configurar o DRF:
Adicione ao INSTALLED_APPS
em myproject/settings.py
:
2. Criação dos Serializers
Crie um arquivo serializers.py
na aplicação minhaapp
:
# minhaapp/serializers.py
from rest_framework import serializers
from myapp.models import Produto
class ProdutoSerializer(serializers.ModelSerializer):
class Meta:
model = Produto
fields = ['id', 'nome', 'preco', 'descricao', 'disponivel']
read_only_fields = ['id']
3. Criação das Viewsets e API Views
Atualize ou crie um arquivo api.py
na aplicação:
# minhaapp/api.py
from rest_framework import viewsets, generics
from rest_framework.response import Response
from rest_framework.decorators import action
from myapp.models import Produto
from myapp.serializers import ProdutoSerializer
class ProdutoViewSet(viewsets.ModelViewSet):
queryset = Produto.objects.all()
serializer_class = ProdutoSerializer
@action(detail=False, methods=['get'])
def disponiveis(self, request):
produtos = Produto.objects.filter(disponivel=True)
serializer = self.get_serializer(produtos, many=True)
return Response(serializer.data)
class ProdutosBaratosAPIView(generics.ListAPIView):
serializer_class = ProdutoSerializer
def get_queryset(self):
return Produto.objects.filter(preco__lt=1000)
4. Configuração das URLs da API
Crie um arquivo api_urls.py
na aplicação:
# myapp/api_urls.py
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from minhaapp.api import ProdutoViewSet, ProdutosBaratosAPIView
router = DefaultRouter()
router.register(r'produtos', ProdutoViewSet, basename='produto')
urlpatterns = [
path('', include(router.urls)),
path('produtos/baratos/', ProdutosBaratosAPIView.as_view(), name='produtos-baratos'),
]
Atualize o urls.py
principal do projeto:
# myproject/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('myapp.urls')), # URLs tradicionais
path('api/', include('minhaapp.api_urls')), # URLs da API
path('api-auth/', include('rest_framework.urls')), # Login para a API
]
5. Documentação da API com Swagger/OpenAPI
Instale o drf-yasg para documentação:
Adicione ao INSTALLED_APPS
:
Atualize o urls.py
principal:
# myproject/urls.py
from rest_framework import permissions
from drf_yasg.views import get_schema_view
from drf_yasg import openapi
schema_view = get_schema_view(
openapi.Info(
title="API de Produtos",
default_version='v1',
description="API para gerenciamento de produtos",
terms_of_service="https://www.google.com/policies/terms/",
contact=openapi.Contact(email="contato@empresa.com"),
license=openapi.License(name="BSD License"),
),
public=True,
permission_classes=(permissions.AllowAny,),
)
urlpatterns = [
# ... URLs existentes
path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
path('redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'),
]
6. Testando a API
Agora você pode testar os endpoints da API:
- Listar todos os produtos:
GET /api/produtos/
- Criar novo produto:
POST /api/produtos/
- Detalhes de um produto:
GET /api/produtos/1/
- Atualizar produto:
PUT /api/produtos/1/
- Produtos disponíveis:
GET /api/produtos/disponiveis/
- Produtos baratos:
GET /api/produtos/baratos/
- Documentação Swagger:
GET /swagger/
- Documentação ReDoc:
GET /redoc/
Esta extensão transforma seu aplicativo Django em uma API RESTful poderosa enquanto mantém a funcionalidade web tradicional. Você agora pode:
- Consumir a API com frontends modernos (React, Vue, Angular)
- Oferecer serviços para aplicativos móveis
- Integrar com outros sistemas via API
- Manter uma arquitetura escalável e bem organizada