Como Crear una API REST con Django 3.1.1 + Consumir Datos en una Aplicación Android – Parte 5

8 minuto(s)

Demo

En la parte anterior llamada Como Crear una API REST con Django 3.1.1 + Consumir Datos en una Aplicación Android – Parte 4, creamos el EndPoint /postres, asimismo en la tabla postres insertamos un par de datos o postres, creamos el Serializer para listar los datos de postres, configuramos la ruta de este EndPoint y por último realizamos una prueba para verificar si este EndPoint /postres, devolvia datos. En esta parte 5 del tutorial, vamos a proteger los EndPoints mediante JWT (JSON Web Tokens), vamos con ello.

Partes

Antes de continuar te invito a leer los siguientes artículos:

Asimismo, te invito a escuchar el Podcast: “Como Mantenerte Motivado Para Seguir Programando”:

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 5.

En la Parte 3 de este tutorial que consta de varias partes, instalamos el paquete Django REST Framework  y en su documentación oficial nos brindan diferentes tecnologías para autenticarse, entre ellas esta JSON Web Authentication y nos comparten un enlace al paquete djangorestframework-simplejwt el cual va ser el que usaré para tener la tecnología JWT (JSON Web Token) en nuestra API REST.

Para instalar el paquete djangorestframework-simplejwt, ejecuto el siguiente comando:


Paso seguido, debo registrar el paquete en el archivo settings.py que se encuentra en api_rest_django > settings.py


Abro el archivo settings.py y en la sección INSTALLED_APPS registro el paquete que acabo de instalar.


Bien, ahora vamos a realizar algunas configuraciones para que el sistema de autenticación que desplegamos en la Parte 2 de este tutorial, se integre con la tecnología JWT (JSON Web Tokens).

Asi como creamos los modulos jugos y postres en partes anteriores, voy a crear también el modulo usuarios, pero solo usaré su archivo models.py ya que nuestro sistema de autenticación ya esta listo en si, para hacer una autenticación nativa en Django, esto porque en la Parte 2 de este tutorial, cuando ejecutamos las migraciones que nos trae por defecto Django al crear un nuevo proyecto, pues nos creo varias tablas, entre ellas una llamada auth_user y usaré esta misma tabla para autenticar usuarios en la API REST, también usaremos el propio sistema nativo y clases internas del mismo Django para la autenticación.

Voy a crear el módulo usuarios, para esto ejecuto el siguiente comando:


Luego de ejecutar el comando anterior, en la consola no aparece nada y se me ha creado un directorio con el nombre usuarios que contiene un conjunto de carpetas y archivos indispensables para que este módulo funcione adecuadamente y dentro hay un archivo llamado models.py, abro ese archivo.


Dentro del archivo models.py voy a comenzar importanto los modelos de base de datos y la clase AbstractUser. Luego creo una clase llamada Usuarios y le paso la clase AbstractUser dentro de parentesis, defino los campos de la tabla auth_user que quiero utilizar, estos son username, password, email y date_joined.

Finalmente defino el campo que será el nombre de usuario para iniciar sesión, para este tutorial usaré el email dentro de la variable USERNAME_FIELD, adicionalmente agrego la variable REQUIRED_FIELD en donde puedo definir que campos son requeridos, pero le colocaré un corchete de apertura y uno de cierre solamente. Si más adelante requiero definir campos requeridos en esta variable, pues lo haré, no hay problema.


Ahora pasaré a proteger las rutas o EndPoints /jugos y /postres de la API REST. Para ello abro el archivo views.py de cada módulo, es decir de jugos y postres. Primero comenzaré con el módulo jugos, abro el archivo views.py que se encuentra en api_rest_django > jugos > views.py


Dentro del archivo views.py del módulo jugos, importo la clase IsAuthenticated de Django Rest Framework. Paso seguido dentro de la clase JugosViewSet creo una variable con el nombre permission_classes y en su interior llamo a la clase IsAuthenticated. 


Con esto entonces, cuando el cliente intente acceder a los datos del EndPoint o ruta /jugos, pues se le solicitará que inicie sesión con su email y password la primera vez y posteriormente con un JWT (JSON Web Token), falta configurar la protección en el archivo urls.py, esto lo veremos más abajo.

Hago lo mismo con el módulo postres, abro el archivo views.py que se encuentra en api_rest_django > postres > views.py


Dentro del archivo views.py del módulo jugos, importo la clase IsAuthenticated de Django Rest Framework. Paso seguido dentro de la clase JugosViewSet creo una variable con el nombre permission_classes y en su interior llamo a la clase IsAuthenticated. 


De la misma manera, cuando el cliente intente acceder a los datos del EndPoint o ruta /postres, pues se le solicitará que inicie sesión con su email y password la primera vez y posteriormente con un JWT (JSON Web Token), falta configurar la protección en el archivo urls.py, esto lo veremos a continuación.

Abro el archivo urls.py, este archivo se encuentra en api_rest_django > urls.py


Dentro del archivo urls.py importo el paquete rest_framework_simplejwt, que me permite usar JWT (JSON Web Tokens) en mi proyecto.

Es importante recordar que para leer los EndPoints de mi API REST, necesito usar un cliente, puede ser por ejemplo una aplicación Android. Pero antes voy a crear 2 rutas, una para poder gener un primer token /api/token y otra para refrescar y obtener un nuevo token /api/token/refresh/


Ahora voy a verificar que se ha integrado correctamente la tecnología JWT (JSON Web Tokens) en mi proyecto, para ello haré uso de la herramienta Postman.

Si intento acceder a la ruta http://localhost:8000/jugos para listar los registros o jugos que hay en la tabla jugos de la base de datos, me devolverá el mensaje “detail”: “Authentication credentials were not provided.” Esto significa que debo enviarle un token para poder acceder a los datos.

Y si le paso un token, es decir un JWT (JSON Web Token), pues si me devuelve los datos de jugos respectivos.

La ruta para poder gener un primer token /api/token y otra para refrescar y obtener un nuevo token /api/token/refresh/ las podremos apreciar como funcionan cuando usemos la aplicación Android para leer los jugos y postres.

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 trabajar en la aplicación Android, para acceder a los datos de la API REST.
  • 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.