Como Crear una API REST con Django 3.1.1 + Consumir Datos en una Aplicación Android – Parte 3
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 2 creamos la migración y la tabla para los usuarios que podrán hacer login y registrarse en la API mediante un correspondiente EndPoint, asimismo creamos 2 tablas para los datos de postres y jugos, estos datos el servidor solo podrá mostrarlos si el usuario inicio correctamente sesión y habiendo enviando y JWT (JSON Web token) respectivo, en esta Parte 3 vamos a continuar el tutorial Como Crear una API REST con Django 3.1.1 + Consumir Datos en una Aplicación Android, 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: “Porque Debes Acostumbrarte A Resolver Los Problemas De Código Por Tu Cuenta”:
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 3.
Desplegando Django REST Framework
Existe una herramienta muy usada para crear APIs REST en Django, esta se llama Django REST Framework y para poder usarla debemos instalarla ejecutando el siguiente comando en nuestra consola de comandos.
1 2 3 4 5 6 7 8 9 10 11 12 |
pip install djangorestframework Collecting djangorestframework Downloading djangorestframework-3.12.4-py3-none-any.whl (957 kB) Requirement already satisfied: django>=2.2 in c:\python39\lib\site-packages (from djangorestframework) (3.1.4) Requirement already satisfied: pytz in c:\python39\lib\site-packages (from django>=2.2->djangorestframework) (2021.1) Requirement already satisfied: asgiref<4,>=3.2.10 in c:\python39\lib\site-packages (from django>=2.2->djangorestframework) (3.3.4) Requirement already satisfied: sqlparse>=0.2.2 in c:\python39\lib\site-packages (from django>=2.2->djangorestframework) (0.4.1) Installing collected packages: djangorestframework Successfully installed djangorestframework-3.12.4 |
La ultima versión de Django REST Framework es la 3.12.4 , hasta la fecha de este Post lo es, en el futuro obviamente aparecerán nuevas versiones. Luego de instalar Django REST Framework, debemos de registrarlo en el archivo settings.py el cual se encuentra en api_rest_django > api_rest_django > settings.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
/api_rest_django ├── /api_rest_django ├── /jugos ├── /mientornovirtual ├── /postres ├── /_pycache_ ├── _init_.py ├── asgi.py ├── settings.py // Abrimos este archivo ├── urls.py ├── wsgi.py ├── db.sqlite3 ├── manage.py |
Abrimos el archivo settings.py y dentro de el nos dirigimos a la sección que dice INSTALLED_APPS y registramos rest_framework.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'postres', 'jugos', 'rest_framework', # Registramos Django REST Framework' ] |
Pruebas con un Endpoint Inicial
Ahora vamos a probar si la API REST esta funcionando sin problemas, para esto voy a insertar un par de jugos en la tabla jugos de la base de datos, esto lo haré manualmente desde phpMyAdmin, si tu deseas puedes manejar los datos mediante un sistema CRUD, te recomiendo leer el tutorial Como crear un CRUD con Django 3.1 (Python 3.9) y Bootstrap 4.6 – Parte 1.
Voy a mi tabla jugos e inserto un par de registros o jugos manualmente, estos son Jugo de Fresa y Jugo de Platano.
En la consola me dice que pude usar el siguiente comando para insertar el par de registros o jugos.
1 2 3 4 5 6 |
/* Comando para insertar los 2 registros o jugos */ INSERT INTO `jugos` (`id`, `nombre`, `precio`, `stock`, `img`, `created_at`, `updated_at`) VALUES (NULL, 'Jugo de Fresa', '3.50', '57', 'jf.jpg', '2021-05-17 20:54:06.000000', '2021-05-17 20:54:06.000000'), (NULL, 'Jugo de Platano', '3.00', '45', 'jp.jpg', '2021-05-17 20:54:06.000000', '2021-05-17 20:54:06.000000'); |
Verifico que se han insertado los 2 registros en mi tabla jugos.
Ya tenemos entonces datos en la base de datos, ahora vamos a crear el flujo para nuestro Endpoint /jugos, por ejemplo cuando yo solicite datos a la ruta http://localhost:8000/jugos/ mediante mi cliente que puede ser el navegador, aplicación android, la herramienta Postman, etc., me debe listar el par de jugos que tengo registrados en la base de datos.
Ahora crearé un archivo llamado serializers.py dentro del directorio jugos, esto porque usaremos datos de jugos y si por ejemplo usamos datos de postres, pues lo creamos también en el directorio postres, 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 ├── /_pycache_ ├── migrations ├── __init__.py ├── admin.py ├── apps.py ├── models.py ├── serializers.py // Creo y Abro este archivo ├── tests.py ├── views.py ├── /mientornovirtual ├── /postres ├── db.sqlite3 ├── manage.py |
Abro el archivo serializers.py y dentro de el importo Django REST Framework y mi modelo Jugos. Asimismo creo una clase llamada JugosSerializer y le paso el modelo Serializer de Django REST Framework, debajo uso el modelo Jugos, defino los campos que quiero enviar a mi Endpoint /jugos 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 Jugos class JugosSerializer(serializers.ModelSerializer): class Meta: model = Jugos fields = ['id', 'nombre', 'precio', 'stock', 'img', 'created_at', 'updated_at'] extra_kwargs = {'id': {'required': False}} |
Ahora 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 ├── /_pycache_ ├── migrations ├── __init__.py ├── admin.py ├── apps.py ├── models.py ├── serializers.py ├── tests.py ├── views.py // Abro este archivo ├── /mientornovirtual ├── /postres ├── 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 JugosSerializer.
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 'JugosSerializer' from jugos.serializers import JugosSerializer # Modelo 'Jugos' from jugos.models import Jugos class JugosViewSet(viewsets.ModelViewSet): queryset = Jugos.objects.all().order_by('id') serializer_class = JugosSerializer |
Por último para probar nuestro Endpoint /jugos, 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 |
Abrimos el archivo urls.py e importamos DefaultRouter de Django REST Framework y la vista jugos. Asimismo registramos la url jugos, le pasamos la clase JugosViewSet. 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 |
"""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 # Importamos 'DefaultRouter' de Django REST Framework y la vista 'jugos' from rest_framework.routers import DefaultRouter from jugos import views as jugos_views router = DefaultRouter() router.register(r'jugos', jugos_views.JugosViewSet, basename='jugos') urlpatterns = [ path('admin/', admin.site.urls), path('', include(router.urls)), ] |
Bien 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/jugos/, pues me lista los datos en formato JSON.
Con esto entonces verifico que mi API REST va por buen camino, ya hemos probado el Endpoint /jugos, pero falta colocarle una capa de seguridad llamada JWT (Json Web Tokens), porque cualquier usuario no puede acceder estos datos, a menos que este registrado y envíe un JWT al servidor, esto lo veremos más adelante junto con los demás Endpoints.
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 crear el Endpoint /postres y verificaremos que también funcione correctamente.
- 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.
- Django Tutoriales
- 16-05-2021
- 14-07-2023
- Crear un Post - Eventos Devs - Foro