Guía 21: Django - Django Rest Framework (DRF)#
Actividades previas#
Ambiente de desarrollo#
Acceda a su proyecto django_api_suite en Codespaces o en su máquina local.
Cree y utilice la(s) rama(s) de desarrollo.
Cree y habilite el ambiente virtual de desarrollo, con:
python -m venv env source env/bin/activate
Instale las librerías de requirements.txt, con:
pip install -r requirements.txt
Actividades en clases#
Paquete: Django REST framework (DRF)#
Instale Django REST framework en su ambiente de desarrollo:
pip install djangorestframework
Registre el Django REST framework en el archivo
backend_data_server/settings.pydel proyecto:INSTALLED_APPS = [ ... "rest_framework", "homepage", ]
Utilice su cliente de IAG generativa para explicar qué es Django REST framework y cuáles son sus principales características.
Aplicación: DEMO REST API#
Cree una la aplicación demo_rest_api en su proyecto.
Registre la aplicación en el archivo de configuración
backend_data_server/settings.pydel proyecto.Registre la ruta "demo/rest/api/" con las subrutas de la aplicación demo_rest_api
Cree el archivo
demo_rest_api/urls.pycon la ruta "index/" a la vista DemoRestApi:from django.urls import path from . import views urlpatterns = [ path("index/", views.DemoRestApi.as_view(), name="demo_rest_api_resources" ), ]
Cree la vista basada en clases en
demo_rest_api/views.pyque muestre la vista predeterminada de DRF:from django.shortcuts import render # Create your views here. from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status import uuid # Simulación de base de datos local en memoria data_list = [] # Añadiendo algunos datos de ejemplo para probar el GET data_list.append({'id': str(uuid.uuid4()), 'name': 'User01', 'email': 'user01@example.com', 'is_active': True}) data_list.append({'id': str(uuid.uuid4()), 'name': 'User02', 'email': 'user02@example.com', 'is_active': True}) data_list.append({'id': str(uuid.uuid4()), 'name': 'User03', 'email': 'user03@example.com', 'is_active': False}) # Ejemplo de item inactivo class DemoRestApi(APIView): name = "Demo REST API"
Levante el servidor de desarrollo de Django:
python manage.py runserver
Revise los cambios en el navegador con la URL raíz, seguida por la ruta /demo/rest/api/index/
Utilice su cliente de IAG generativa para explicar el estilo arquitectónico REST y su implementación en DRF.
GET#
Utilice su cliente de IAG para manejar el método GET en la vista de la API, considerando:
Retorne el arreglo data_list como respuesta JSON, con el código de estado HTTP 200 OK.
Ver el código
class DemoRestApi(APIView): ... def get(self, request): # Filtra la lista para incluir solo los elementos donde 'is_active' es True active_items = [item for item in data_list if item.get('is_active', False)] return Response(active_items, status=status.HTTP_200_OK)
Revise los cambios en el navegador con la URL raíz, seguida por las rutas /demo/rest/api/ y /demo/rest/api/?format=json
Utilice su cliente de IAG generativa para explicar el método GET en el contexto de una API REST y la utilidad del código de estado HTTP en la respuesta.
POST#
Utilice su cliente de IAG para manejar el método POST en la vista de la API, considerando:
Extraiga los datos enviados en el cuerpo de la solicitud en la variable data.
Validar que los campos name y email estén presentes. Si falta alguno, debe retornar una respuesta con código HTTP 400 y un mensaje de error.
Si los campos son válidos:
Generar un identificador único utilizando uuid.uuid4() y asigne al campo “id” a la variable data,
Agregue a la variable data el campo “is_active” con el valor True ,
Agregue la variable data a la lista data_list.
Finalmente, debe retornar una respuesta con código HTTP 201 (Created), un mensaje de éxito y los datos guardados.
Ver el código
class DemoRestApi(APIView): ... def post(self, request): data = request.data # Validación mínima if 'name' not in data or 'email' not in data: return Response({'error': 'Faltan campos requeridos.'}, status=status.HTTP_400_BAD_REQUEST) data['id'] = str(uuid.uuid4()) data['is_active'] = True data_list.append(data) return Response({'message': 'Dato guardado exitosamente.', 'data': data}, status=status.HTTP_201_CREATED)
Revise los cambios en el navegador con la URL raíz, seguida por la ruta /demo/rest/api/ y envíe una solicitud POST con el cuerpo, p.e.:
{ "name": "User04", "email": "user04@example.com" }
PUT, PATCH y DELETE#
Utilice su cliente de IAG para modificar:
El archivo
demo_rest_api/views.pycon la claseDemoRestApiItem, que responda a los métodos:PUT debe reemplazar completamente los datos de un elemento del arreglo, excepto el identificador que se envía como campo obligatorio en el cuerpo de la solicitud.
PATCH debe actualizar parcialmente los campos del elemento identificado por su identificador, manteniendo los valores no modificados.
DELETE debe eliminar lógicamente un elemento del arreglo según el identificador proporcionado.
Nota
Cada método debe responder, en caso de éxito o error, con el código de estado HTTP correspondiente y un mensaje descriptivo.
El archivo
demo_rest_api/urls.pycon la ruta «<str:id>/» con la vistaDemoRestApiItem.
Revise los cambios en el navegador con la URL raíz, seguida por la ruta /demo/rest/api/<str:id>/ y compruebe el funcionamiento de las solicituds PUT, PATCH y DELETE.
Nota
Verifique que el nombre del parámetro («<str:item_id>/») en la ruta coincida con el nombre del parámetro (def delete(self, request, item_id):) en el método de la vista basada en clases.
Utilice su cliente de IAG generativa para explicar los métodos PUT, PATCH y DELETE en el contexto de una API REST y la importancia de los códigos de estado HTTP en las respuestas.
Gestión de dependencias#
Genere el archivo requirements.txt con la lista de paquetes utilizados, con:
pip freeze > requirements.txt
Desactive el ambiente virtual de desarrollo, con:
deactivate
Versionamiento#
Versione local y remotamente la(s) rama(s) de desarrollo en el repositorio django_api_suite.
Genere la(s) solicitud(es) de cambios (pull request) para la rama principal y apruebe los cambios.
Conclusiones#
Actividades autónomas#
Recursos extras#
En redes:
#REST #API what is it?
— Terrasoft (@Terrasoft_ltd) December 6, 2023
Representational State Transfer
This means that when a #client requests a resource using a REST API, the #server transfers back the current state of the resource in a standardized representation pic.twitter.com/xCFXw9cQFZ