Demo
En la anterior parte de este tutorial llamada Como Crear una API REST con Django 3.1.1 + Consumir Datos en una Aplicación Android – Parte 3, deplegamos un paquete llamado Django REST Framework que nos servirá para crear nuestra API REST en Django, asimismo configuramos un EndPoint inicial llamado /jugos, para verificar si la API REST esta funcionando correctamente, en este nuevo Post vamos a crear unEndPoint más llamado /postres, vamos con ello.
Partes
Antes de continuar te invito a leer los siguientes artículos:
- Que es Django, Historia y tu primer Hola Mundo (Corregido: 31-05-2019)
- Conceptos Iniciales para desplegar Django
- Como usar Django y React JS (Método Manual, no Librería)
- Como integrar Django y Bootstrap 4
- Como crear un CRUD con Django 3.1 (Python 3.9) y Bootstrap 4.6 – Parte 1
- 5 Servicios de Hosting VPS ideales para publicar un Proyecto Creado con Django
- Como Integrar Firebase en Django 3.0.7 – Parte 1
- 7 Proyectos que han sido Creados con Django Framework
- Puedes leer más en la categoría Django
Asimismo te invito a escuchar el Podcast: “¿ Que Hago Si No Tengo Los Recursos Para Dedicarme A La Programación ?”:
Spotify: | Sound Cloud: | Apple Podcasts |
Bien ahora continuemos con el Post: Como Crear una API REST con Django 3.1.1 + Consumir Datos en una Aplicación Android – Parte 4.
El sistema API REST va tener 2 EndPoints, ya cree uno llamado /jugos en la Parte 3 de este tutorial, ahora voy a crear uno nuevo llamado /postres. Este EndPoint /postres va listar registros o datos de postres y estos datos deben estar en nuestra tabla llamada postres en la base de datos.
Yo me estoy enfocando en crear la API REST más no en insertar o realizar tareas CRUD (Create, Read, Update y Delete) en la tabla postres, pero te recomiendo leer el tutorial Como crear un CRUD con Django 3.1 (Python 3.9) y Bootstrap 4.6 – Parte 1.
En ese tutorial aprenderás a realizar tareas CRUD (Create, Read, Update y Delete) en la base de datos, los cuales te pueden servir para tu propia API REST.
Yo para enfocarme unicamente en la creación de la API REST, voy a insertar un par de registros manualmente en la tabla postres, estos son Torta de Chocolate y Gelatina de Fresa.
En la consola me dice que pude usar el siguiente comando para insertar el par de registros o postres.
1 2 3 4 5 6 |
/* Comando para insertar los 2 registros o postres */ INSERT INTO `postres` (`id`, `nombre`, `precio`, `stock`, `img`, `created_at`, `updated_at`) VALUES (NULL, 'Torta de Chocolate', '4.00', '35', 'tc.jpg', '2021-12-15 20:10:32.000000', '2021-12-15 20:10:32.000000'), (NULL, 'Gelatina de Fresa', '2.00', '45', 'gf.jpg', '2021-12-15 20:10:32.000000', '2021-12-15 20:10:32.000000'); |
Verifico que se han insertado los 2 registros en mi tabla postres.
Entonces ya tengo datos en la tabla postres, ahora vamos a crear el flujo para nuestro Endpoint /postres, por ejemplo cuando yo solicite datos a la ruta http://localhost:8000/postres/ mediante mi cliente que puede ser el navegador, aplicación android, la herramienta Postman, etc., me debe listar el par de postres que tengo registrados en la base de datos.
Crearé un archivo llamado serializers.py dentro del directorio postres, esto porque usaremos datos de postres y si por ejemplo usamos datos de jugos, pues lo creamos también en el directorio jugos, esto para mantener un orden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
/api_rest_django ├── /api_rest_django ├── /jugos ├── /mientornovirtual ├── /postres ├── /_pycache_ ├── migrations ├── __init__.py ├── admin.py ├── apps.py ├── models.py ├── serializers.py // Creo y Abro este archivo ├── tests.py ├── views.py ├── db.sqlite3 ├── manage.py |
Abro el archivo serializers.py y dentro de el importo Django REST Framework y mi modelo Postres. Asimismo creo una clase llamada PostresSerializer y le paso el modelo Serializer de Django REST Framework, debajo uso el modelo Postres, defino los campos que quiero enviar a mi Endpoint /postres y le indico que no es necesario escribir un id de un registro para poder obtener los datos.
1 2 3 4 5 6 7 8 9 10 |
from rest_framework import serializers from jugos.models import Postres class PostresSerializer(serializers.ModelSerializer): class Meta: model = Postres fields = ['id', 'nombre', 'precio', 'stock', 'img', 'created_at', 'updated_at'] extra_kwargs = {'id': {'required': False}} |
Paso seguido abro el archivo views.py que se encuentra en jugos > views.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
/api_rest_django ├── /api_rest_django ├── /jugos ├── /mientornovirtual ├── /postres ├── /_pycache_ ├── migrations ├── __init__.py ├── admin.py ├── apps.py ├── models.py ├── serializers.py ├── tests.py ├── views.py // Abro este archivo ├── db.sqlite3 ├── manage.py |
Dentro del archivo views.py importo algunos elementos que son importantes y necesarios para que el API REST funcione sin problemas, entre estas importaciones llamamos a la clase JugosSerializer que creamos anteriormente dentro del archivo serializers.py, también llamo al modelo Jugos y a otros elementos.
Asimismo creo un ViewSet con el nombre de clase JugosViewSet y dentro de el voy a llamar a los datos ordenándolos por id y le paso la clase JugosSerializar.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
from django.shortcuts import render # Elementos necesarios para que el API REST funcione from rest_framework import viewsets from django.http import Http404 from rest_framework import status from rest_framework.response import Response # Clase 'PostresSerializer' from postres.serializers import PostresSerializer # Modelo 'Postres' from postres.models import Postres class PostresViewSet(viewsets.ModelViewSet): queryset = Postres.objects.all().order_by('id') serializer_class = PostresSerializer |
Por último para probar nuestro Endpoint /postres, creamos una url dentro del archivo urls.py, este archivo se encuentra en api_rest_django > urls.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
/api_rest_django ├── /api_rest_django ├── /_pycache_ ├── _init_.py ├── asgi.py ├── settings.py ├── urls.py // Abrimos este archivo ├── wsgi.py ├── /jugos ├── /mientornovirtual ├── /postres ├── db.sqlite3 ├── manage.py |
Abro el archivo urls.py e importo Django REST Framework y la vista postres. Asimismo instancio routers.DefaultRouter() y registro la url postres, le paso la clase PostresViewSet. Dentro de urlpatterns agregamos path(”, include(router.urls)).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
"""api_rest_django URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/3.1/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: path('', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') Including another URLconf 1. Import the include() function: from django.urls import include, path 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin from django.urls import include, path from rest_framework.routers import DefaultRouter # Importamos Django REST Framework y la vista 'jugos' from jugos import views as jugos_views from postres import views as postres_views router = DefaultRouter() router.register(r'jugos', jugos_views.JugosViewSet, basename='jugos') router.register(r'postres', postres_views.PostresViewSet, basename='postres') urlpatterns = [ path('admin/', admin.site.urls), path('', include(router.urls)), ] |
Ahora inicio el servidor local de Django Framework.
1 2 3 4 5 6 7 |
// Comando para iniciar el servidor local de Django Framework python manage.py runserver Watching for file changes with StatReloader [17/May/2021 22:54:25] "GET /jugos/ HTTP/1.1" 200 10127 |
Y si hago uso de la herramienta Postman que nos ayuda a probar nuestras APIs REST, hago una solicitud de tipo GET a mi Endpoint http://localhost:8000/postres/, pues me lista los datos en formato JSON.
Con la prueba anterior verifico que mi Endpoint /postres, esta funcionando correctamente.
Ten Paciencia, lo que quiero es que conozcas bien como se crea este proyecto y no llenarte el capitulo de mucho contenido porque te puedes marear y no tendrás un óptimo aprendizaje.
Nota (s)
- En la siguiente parte vamos a proteger nuestros EndPoints /jugos y /postres con JWT (JSON Web Tokens).
- No olvides que debemos usar la Tecnología para hacer cosas Buenas por el Mundo.
Síguenos en nuestras Redes Sociales para que no te pierdas nuestros próximos contenidos.