4

RestFramework: Crea un CRUD con pocas líneas de código

Si has llegado hasta aquí, de seguro sabes que es todo este alboroto de django. Pero lo vamos a repasar. Y si no sabes qué es, pues genial, aquí se explicará.

Django

Django es un framework para el desarrollo web escrito en python; muy simple, eficiente y con una curva de aprendizaje corta, para la creación de apliaciones web. Django utiliza la arquitectura MTV (model template view), muy similar a la famosa arquitectura MVC (model view controller) utilizados en muchísimos frameworks como ASP. NET en C#, Rail en Ruby, Spring en Java, Laravel en PHP, entre otros.

El modelo es donde nosotros definimos la estructuras de los datos en la base de datos. El template es lo que vemos renderizado en el navegador. Y la vista es toda esa lógica que se encarga de traer los datos de la base de datos y presentarlos en el template. La arquitectura de django es muy fácil y rápida de aprender 😄💪

Screenshot from 2021-02-21 13-47-50.png

Y a todo esto…entonces, ¿el título del tutorial está incorrecto? ¿Django rest framework?

Django Rest Framework (DRF)

DRF es una herramienta imprescindible para crear APIs REST con Django, la librería externa de Django más usada. Una API es un conjunto de definiciones y protocolos que se usa para diseñar e integrar el software de aplicaciones. Y para transmitir estos datos se usa un conjunto de arquitectura llamado REST, donde se usa al JSON como medio de transporte entre la petición (request) y la respuesta (response) entre el cliente y el servidor.

Una API sirve a un cliente. El cliente le solicita algo al servidor por medio de una petición (request) y la API le devuelve lo solicitado (response), fácil y sin realizar todo el proceso lógico detrás. Poniendo el ejemplo de un restaurante, nosotros como cliente enviaríamos de petición el nombre de un plato del menú y la API nos respondería con el precio del plato, descripción que y opiniones de clientes sobre el plato.

API.jpg

En este tutorial aprenderemos a realizar el endpoint de un CRUD (create read update delete) sobre un modelo, usando la menor cantidad de líneas de código posible. Y demostrarte que DRF es muy fácil y rápido de aprender.

Creando nuestra API

Este tutorial será creado usando la terminal de comandos de Ubuntu y servirá también para los usuarios de MacOS. Si tienes Windows, puedes encontrar la equivalencia de los comandos buscando en google o instalando el Subsistema de Linux en Windows (WSL). Te dejo un enlace al tutorial de un profesor de platzi 💚 para la instalación del WSL.

Además, debes instalar el módulo de python llamado virtualenv para crear un ambiente virtual y los paquetes que necesitemos, se guarden en un ambiente aislado. Te dejo el link.

Activamos el ambiente virtual e instalamos los paquetes necesarios para la creación de nuestra API.

$ cd project
$ python3 -m venv venv
$ source venv/bin/activate
$ python3 -m pip install django djangorestframework

Ya que estuvimos hablando arriba de restaurantes y platos, entonces hagamos el proyecto de un resurante. Creamos el proyecto llamado MyRestaurantProject y la app Menus.

$ django-admin startproject MyRestaurantProject
$ python3 manage.py startapp menus

Ahora la distribución de carpetas nos quedará así:
Screenshot from 2021-02-21 15-18-17.png

Primero, en el archivo MyRestaurantProject/settings.py añadimos la app recién creada y a DRF.

INSTALLED_APPS = [...'rest_framework',
    	'menus',
	...]

Y en el MyRestaurant/urls.py añadimos las urls de nuestra nueva app.

from django.urls import path, include

urlpatterns = [
	...
    	path(' ', include(('menus.urls', 'menus'), namespace='menus')),
	...
]

Volvemos a nuestra app y creamos el modelo en menus/models.py. Recordemos que aquí se define la estructura de cómo los datos se guardarán en la base de datos.

from django.db import models

classPlate(models.Model):
    name = models.CharField(max_length=50)description = models.CharField(max_length=250,blank=True)price = models.FloatField()
    created = models.DateTimeField(auto_now_add=True)modified = models.DateTimeField(auto_now=True)

Creamos el siguiente archivo menus/serializers.py y añadimos el código. Los serializers son clases que nos permiten transformar datos de formatos propios de Django, en formato del entorno web (JSON en este caso).

from rest_framework import serializers
from menus.models import Plate

classPlateModelSerializer(serializers.ModelSerializer):
    classMeta:
        model = Plate
        fields = '__all__'

Creamos la lógica de obtención y presentación de los datos en menus/views.py

from rest_framework import viewsets
from menus.models import Plate
from menus.serializers import PlateModelSerializer

classPlateViewSet(viewsets.ModelViewSet):
    queryset = Plate.objects.all()
    serializer_class = PlateModelSerializer

Y por último, añadimos esta vista a las urls en menus/urls.py

from django.urls import include, path
from rest_framework.routers import DefaultRouter
from . import views as menus_views

router = DefaultRouter()
router.register(r'menus', menus_views.PlateViewSet, basename='menus')
urlpatterns = [
    path('', include(router.urls))
]

Y listo 😁 con tan sólo 29 líneas de código, de las cuales 10 fueron de sólo imports, hemos creado el CRUD completo de un modelo. Ahora hacemos las migraciones y corremos el servidor para ver cómo quedó.

$ python3 manage.py makemigrations
$ python3 manage.py migrate
$ python3 manage.py runserver

Ahora en el navegador podemos listar (GET), crear (POST), editar (PUT & PATCH) y borrar (DELETE) los platos de nuestro restaurante en la misma url, modificando únicamente los verbos HTTP.

Screenshot from 2021-02-21 16-36-17.png

Ahora que ya viste lo fácil que es crear APIs REST en Django, te invito a ampliar tus conocimientos tomando el curso avanzado de Django donde se aprenderán muchos temas más para crear una API profesional🚀. Crea tu API y compártela en un tutorial. Sígueme en twitter y conversemos sobre tecnología 😁

Escribe tu comentario
+ 2
1
28562Puntos

El curso está muy desactualizado, cuando se actualizará?

1
17204Puntos
9 meses

Concuerdo contigo.

5
21504Puntos
9 meses

Leí hace un par de meses en twitter, que se está trabajando en una nueva serie de cursos de Django para Platzi. El profesor será Facundo Martoni creo