Como Crear una API REST con Django 3.1.1 + Consumir Datos en una Aplicación Android – Parte 2
En esta página:
Demo
En la parte 1 de este tutorial llamada Como Crear una API REST con Django 3.1.1 + Consumir Datos en una Aplicación Android – Parte 1 creamos el nuevo proyecto en Django Framework, asimismo configuramos la Base de Datos MySQL en donde almacenaremos nuestros datos, previamente configuramos el cliente para Python y MySQL, en este Parte 2 vamos a crear las migraciones y las tablas de nuestra Base de datos, entre otras tareas, 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 2 y Bootstrap 4 – Parte 1 (Python 3.7)
- 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: “Herramientas Online Para El Trabajo En Equipo”:
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 2.
En la Parte 1 de este tutorial mencione que el proyecto constará de 5 EndPoints los cuales serán /login, /registro, /listarpostres, /listarusuarios y /listarjugos y para que los usuarios puedan leer por ejemplo los datos de postres y de jugos, deberá enviar un token (JWT = JSON Web Token) en su solicitud, con esto le damos una capa de seguridad a nuestra API REST.
Cuando creamos nuestro proyecto con Django Framework este automáticamente nos crea archivos de migraciones nativas para montar un sistema de login y registro de manera rápida ejecutando el comando nativo de Django Framework para crear tablas en la base de datos, este comando nos crea varias tablas junto con la tabla auth_user y con esta tabla vamos a gestionar el EndPoint de login y registro, entonces lo que si tendríamos que crear son las tablas postres y jugos mediante migraciones.
Tabla usuarios (Login y Registro)
Como mencione anteriormente Django nos provee de migraciones para crear varias tablas que formarán parte del sistema de autenticación de nuestro sistema, para esto ejecutamos primero el siguiente comando para verificar si hay cambios en los archivos de migraciones.
1 2 3 4 5 |
python manage.py makemigrations No changes detected |
Tras ejecutar el comando anterior, la consola me dice que no hay cambios detectados, esto es bueno, entonces pasemos a ejecutar el siguiente comando que creará las tablas para el sistema de autenticación (login y registro), adicionalmente Django nos crea otras tablas que son indispensables para que funcione correctamente, no debemos tocar esas tablas porque se puede dañar Django Framework.
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 |
python manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying auth.0012_alter_user_first_name_max_length... OK Applying sessions.0001_initial... OK |
Luego de ejecutar el comando anterior, se me ha creado las tablas en la base de datos para el sistema de autenticación, si voy a PHPMyAdmin debería ver las tablas creadas.
Con estas tablas y sobre todo con la tabla auth_user la cual es la tabla en donde se van almacenar los usuarios, es con la que gestionaremos los EndPoints /login, /registro, y /listarusuarios de nuestra API REST con Django.
Mencionar que si corres el servidor de Django y accedes a la URL local http://127.0.0.1:8000/admin debe aparecer un formulario de login para iniciar sesión.
Bueno ya que no tenemos un usuario creado aún, voy a crear un super usuario en mi base de datos, para esto ejecuto el siguiente comando, ingreso los datos que me solicite hasta que el usuario se haya creado.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
winpty python manage.py createsuperuser Username (leave blank to use 'jrclnc'): jc Email address: micorreo@mail.com Password: Password (again): This password is too short. It must contain at least 8 characters. This password is too common. This password is entirely numeric. Bypass password validation and create user anyway? [y/N]: y Superuser created successfully. |
Si voy a la tabla auth_user, puedo ver que se ha creado mi usuario.
Bien con esto ya tenemos nuestro usuario el cual usaremos para hacer login mediante nuestro API REST y pasandole un JWT (JSON Web Tokens), esto lo veremos más adelante.
Tabla postres y jugos
Bien ahora vamos a crear las tablas postres y jugos que servirán para los EndPoints /listarpostres y /listarjugos.
Postres
Voy a mi consola de comandos y ejecuto primero el siguiente comando para crear la app postres junto con su archivo de migración.
1 2 3 4 |
# Comando para crear la app 'postres' python manage.py startapp postres |
Paso seguido ejecuto el comando anterior pero para la app jugos.
1 2 3 4 |
# Comando para crear la app 'jugos' python manage.py startapp jugos |
En la consola no pasa nada, pero si vamos al directorio principal de nuestro proyecto podemos ver que se nos ha creado 2 directorios llamados postres y jugos.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/api_rest_django ├── /api_rest_django ├── /jugos // Se creo este directorio 'jugos' ├── /mientornovirtual ├── /postres // Se creo este directorio 'postres' ├── /_pycache_ ├── /migrations ├── _init_.py ├── admin.py ├── apps.py ├── models.py ├── tests.py ├── views.py ├── db.sqlite3 ├── manage.py |
Dentro de ambos directorios postres y jugos se han creado varios archivos y una carpeta llamada migrations, asimismo hay un archivo llamado models.py y en el vamos a definir los campos de cada tabla, entonces abrimos primero el archivo models.py de la app postres, este archivo se encuentra en postres > models.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/api_rest_django ├── /api_rest_django ├── /jugos ├── /mientornovirtual ├── /postres ├── /_pycache_ ├── /migrations ├── _init_.py ├── admin.py ├── apps.py ├── models.py // Abre este archivo ├── tests.py ├── views.py ├── db.sqlite3 ├── manage.py |
Dentro del archivo models.py voy a definir los campos nombre, precio, stock, img, created_at y updated_at, el campo id Django Framework lo creará automáticamente.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
from django.db import models from django.utils import timezone # Creación de campos de la tabla 'postres' class Postres(models.Model): nombre = models.CharField(max_length=100, default='DEFAULT VALUE') precio = models.CharField(max_length=20, default='DEFAULT VALUE') stock = models.CharField(max_length=100, default='DEFAULT VALUE') img = models.FileField() created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Meta: db_table = 'postres' # Le doy de nombre 'postres' a nuestra tabla en la Base de Datos |
Jugos
Igualmente para la app jugos abrimos primero el archivo models.py de la app jugos, este archivo se encuentra en jugos > models.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/api_rest_django ├── /api_rest_django ├── /jugos ├── /__pycache__ ├── /migrations ├── __init__.py ├── admin.py ├── apps.py ├── models.py // Abre este archivo ├── tests.py ├── views.py ├── /mientornovirtual ├── /postres ├── db.sqlite3 ├── manage.py |
Dentro del archivo models.py voy a definir los campos nombre, precio, stock, img, created_at y updated_at, el campo id Django Framework lo creará automáticamente.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
from django.db import models from django.utils import timezone # Creación de campos de la tabla 'jugos' class Jugos(models.Model): nombre = models.CharField(max_length=100, default='DEFAULT VALUE') precio = models.CharField(max_length=20, default='DEFAULT VALUE') stock = models.CharField(max_length=100, default='DEFAULT VALUE') img = models.FileField() created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Meta: db_table = 'jugos' # Le doy de nombre 'jugos' a nuestra tabla en la Base de Datos |
Antes de proceder a preparar y crear las tablas postres y jugos, debemos de registrar las apps en nuestro archivo de configuración settings.py, este archivo en 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 |
En el archivo settings.py nos dirigimos a la sección que dice INSTALLED_APPS y registramos la app postres y la app jugos.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'postres', # Registramos la app 'postres' 'jugos', # Registramos la app 'jugos' ] |
Guardamos el archivo y ahora si procedemos primero a crear la tabla postres, para esto ejecutamos el siguiente comando.
1 2 3 4 5 6 7 |
python manage.py makemigrations postres Migrations for 'postres': postres\migrations\0001_initial.py - Create model Postres |
Con el comando anterior hemos preparado nuestra migración antes de crear la tabla postres, ahora ejecutamos el siguiente comando para crear la tabla postres en nuestra base de datos.
1 2 3 4 5 6 7 8 |
python manage.py migrate postres Operations to perform: Apply all migrations: postres Running migrations: Applying postres.0001_initial... OK |
Bien si vamos a PHPMyAdmin podemos ver que se ha creado la tabla postres, con los campos establecidos.
Hacemos los mismo con la tabla jugos, ejecutamos primero el siguiente comando.
1 2 3 4 5 6 7 |
python manage.py makemigrations jugos Migrations for 'jugos': jugos\migrations\0001_initial.py - Create model Jugos |
Igualmente con el comando anterior hemos preparado nuestra migración antes de crear la tabla jugos, ahora ejecutamos el siguiente comando para crear la tabla jugos en nuestra base de datos.
1 2 3 4 5 6 7 8 |
python manage.py migrate jugos Operations to perform: Apply all migrations: jugos Running migrations: Applying jugos.0001_initial... OK |
Entonces igualmente si vamos a PHPMyAdmin podemos ver que se ha creado la tabla jugos, con los campos establecidos.
Bien hasta aquí llegamos con esta Parte 2 en donde creamos las tablas para los usuarios con las migraciones nativas de Django Framework, asimismo creamos las tablas postres y jugos.
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 comenzaremos a crear los EndPoints de nuestra API REST y realizaremos pruebas para verificar si funcionan 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
- 17-01-2021
- 18-02-2023
- Crear un Post - Eventos Devs - Foro