pip install drf-spectacularINSTALLED_APPS += [
'drf_spectacular',
]
REST_FRAMEWORK = {
'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
}
SPECTACULAR_SETTINGS = {
'TITLE': 'API de Productos',
'DESCRIPTION': 'Una API para gestionar productos, categorías y etiquetas.',
'VERSION': '1.0.0',
}
from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView
from django.urls import path
urlpatterns = [
path('api/schema/', SpectacularAPIView.as_view(), name='schema'),
path('api/docs/', SpectacularSwaggerView.as_view(url_name='schema'), name='swagger-
ui'),
]
Crear Docstrings en los modelos (models.py)
class Product(models.Model):
"""
Representa un producto que puede ser gestionado en el sistema.
Campos:
- `name`: Nombre único del producto.
- `price`: Precio del producto en dólares (hasta 2 decimales).
"""
name = models.CharField(
max_length=100,
help_text="Ingrese el nombre único del producto. Ejemplo: 'Camiseta de algodón'."
)
price = models.DecimalField(
max_digits=10,
decimal_places=2,
help_text="Precio del producto en dólares. Debe ser un valor positivo con hasta 2 decimales."
)
Crear Docstrings en los ViewSets
class ProductViewSet(viewsets.ModelViewSet):
"""
API para gestionar productos.
Métodos:
- `GET /products/`: Lista todos los productos.
- `POST /products/`: Crea un nuevo producto.
- `PUT /products/{id}/`: Actualiza un producto.
- `DELETE /products/{id}/`: Elimina un producto.
"""
queryset = Product.objects.all()
serializer_class = ProductSerializer
Crear Docstrings en los endpoints personalizados
@action(detail=True, methods=['get'])
def related_tags(self, request, pk=None):
"""
Devuelve las etiquetas relacionadas con un producto.
Args:
request (Request): Solicitud HTTP.
pk (int): ID del producto.
Returns:
Response: Lista de etiquetas relacionadas con el producto.
"""
product = self.get_object()
tags = product.tags.all()
serializer = TagSerializer(tags, many=True)
return Response(serializer.data)