Tutorial API REST Con Python y Flask
Tutorial API REST Con Python y Flask
de Productos
Create Read Update Delete
Instructivo para proyecto API REST de CRUD de productos con las siguientes tecnologías:
HTML5, CSS3, Bootstrap 5, VUE3, MySQL, Python 3.11 y Flask. con Arquitectura de Software: Modelo
Vista Controlador. Las tres partes del patrón de diseño de software MVC se pueden describir de la
siguiente manera: Modelo: Maneja datos y lógica de negocios. Vista: Se encarga del diseño y
presentación. Controlador: Enruta comandos a los modelos y vistas.
-
Video explicativo del BackEnd para generar la Api que permita los métodos GET,
DELETE, POST y PUT: https://youtu.be/KC1ELsgg5tM
y tiene que mostrar la versión de ambos programas, sino hay que solucionarlo !!!
Si da error, no van a poder instalar lo necesario para el proyecto, van a tener que ejecutar el instalador
de Python y hacer click en Modify
2- Back End con Python y MySQL que luego subiremos al Hosting PythonAnyWhere
Vamos a crear un entorno virtual para instalar los paquetes del proyecto
Un entorno virtual es un entorno de Python parcialmente aislado que permite instalar paquetes para que los
use una aplicación en particular, en lugar de instalarlos en todo el sistema
En la consola escribir:
pip install virtualenv
Si da el siguiente error:
virtualenv proyecto
notamos que nos creó muchos archivos y carpetas, entre ellas una carpeta “proyecto”. luego
hay que activar el entorno virtual, ejecutando “activate” que se encuentra dentro de la carpeta
Scripts en window
Flask es un framework que nos ayuda a ser más productivos con python y bases de datos
para mas informacion : https://flask-es.readthedocs.io/
SQL Alchemy es un kit de herramientas SQL y un ORM (Object Relational Mapper) que
permite a las clases en Python asociarlas a tablas en bases de datos relacionales
para mas informacion: https://flask-es.readthedocs.io/patterns/sqlalchemy/
-Crear una base de datos que se llame por ejemplo proyecto, refrescar y verificar
que se haya creado
Volver al proyecto
Dentro de la carpeta “proyecto”, crear un archivo app.py
dentro del archivo app.py copiar lo siguiente:
# defino la tabla
class Producto(db.Model): # la clase Producto hereda de db.Model
id=db.Column(db.Integer, primary_key=True) #define los campos de la tabla
nombre=db.Column(db.String(100))
precio=db.Column(db.Integer)
stock=db.Column(db.Integer)
imagen=db.Column(db.String(400))
def __init__(self,nombre,precio,stock,imagen): #crea el constructor de la
clase
self.nombre=nombre # no hace falta el id porque lo crea sola mysql por
ser auto_incremento
self.precio=precio
self.stock=stock
self.imagen=imagen
with app.app_context():
db.create_all() # aqui crea todas las tablas
# ************************************************************
class ProductoSchema(ma.Schema):
class Meta:
fields=('id','nombre','precio','stock','imagen')
@app.route('/productos/<id>',methods=['GET'])
def get_producto(id):
producto=Producto.query.get(id)
return producto_schema.jsonify(producto) # retorna el JSON de un producto
recibido como parametro
@app.route('/productos/<id>',methods=['DELETE'])
def delete_producto(id):
producto=Producto.query.get(id)
db.session.delete(producto)
db.session.commit()
return producto_schema.jsonify(producto) # me devuelve un json con el
registro eliminado
@app.route('/productos/<id>' ,methods=['PUT'])
def update_producto(id):
producto=Producto.query.get(id)
nombre=request.json['nombre']
precio=request.json['precio']
stock=request.json['stock']
imagen=request.json['imagen']
producto.nombre=nombre
producto.precio=precio
producto.stock=stock
producto.imagen=imagen
db.session.commit()
return producto_schema.jsonify(producto)
probar en el navegador http://localhost:5000/productos , si devuelve [ ] es que esta’ correcto, es el json que contiene
una lista vacía donde trajo los datos la tabla productos de la base de datos, que como la tabla fue recién creada, está
vacío