Rest FrameWork y Vistas
Rest FrameWork
Django REST framework es un conjunto de herramientas potente y flexible para crear API web Instalación
Añadir 'rest_framework'
a su INSTALLED_APPS
configuración, en el archivo sitealmacen/sitealmacen/settings.py
INSTALLED_APPS = [
...
'rest_framework',
]
Si tiene la intención de utilizar la API
Existen tres maneras de mostrar la información de nuestros modelos
API View
GenericAPIView
ViewSets
API View
Usan los métodos HTTP standard (get y post)
Poseen las siguientes características
Mas control sobre la lógica
Llamar a otras APIs
Trabajar con archivos locales
Ejemplo - Utilizando la aplicación producto:
En el archivo Apps/productos/views.py
from rest_framework.response import Response
from rest_framework.views import APIView
from Apps.productos.models import Producto, TipoProducto
class ProductoView(APIView):
def get(self, request):
productos = Producto.objects.all()
return Response({"productos": productos})
Para que un usuario tenga la capacidad de acceder al End Point, que acabamos de crear, debemos proporcionar una URL en el siguiente archivo Apps/productos/urls.py
from django.urls import path
from Apps.productos.views import ProductoView
app_name = "productos"
urlpatterns = [
path('', ProductoView.as_view()),
]
Desafortunadamente, todo lo que pudimos entregar es una lista vacía porque aún no tenemos ningún artículo en nuestra base de datos.
Una de las razones por las que hicimos esto es para poder agregar Productos
y TipoProductos
directamente a la base de datos desde la página de administración. Continúe y pruébelo agregando un artículo y un autor desde su página de administración.
Ahora nuevamente, probamos con
http://localhost:8000/productos/
Noten que aparece un error
Este error obedece a que en el archivo Apps/productos/views.py
la linea return Response ({“articles”:articles})
. Parece que la lista de productos que ingresamos en la base de datos está intentando serializarse/convertirse a JSON desde un objeto. La razón por la que vemos el mensaje de error anterior es porque no proporcionamos una clase para serializar el objeto Producto
.
Para solucionar este problema, debe aprender acerca de los serializadores.