Este es el curso MÁS completo que encontrarás de FastAPI para iniciales, veremos de todo, desde aspectos básicos como las rutas, vistas, templates, modelos, manejo de formularios, validaciones, entre otros hasta aspectos más completos como Rest Api con token de autenticación que es el corazón de FastAPI, crear APIs, el detalle del curso lo puedes ver en la parte inferior de esta publicación y lo mejor, es que es una inversión para varios años ya que, de manera gratuita, mantendré el curso por varios años a las nuevas versiones y dando mayor soporte por Academia.
Tambien tengo recursos gratuitos para FastAPI como un curso gratis para FastAPI que veremos más adelante.
Comprar el Curso de FastAPI
A continuación, te presendo algunas opciones para comprar el curso; comenzando por la opción con mejor calidad precio que sería en la app de Academia:
Precio mínimo:
$8.0
Condiciones:
Todo el curso de por vida y descarga individual
Un único pago para todo el curso
Actualizaciones más frecuentes que en Udemy para agregar más y más clases al curso.
Es importante mencionar, que el curso tambien tiene el formato en libro con el 100% del contenido del mismo, es decir, el curso es equivalente al libro.
FastAPI es un framework web estupendo para la creación de APIs con Python; nos ofrece múltiple características con las cuales es posible la creación de APIs modulares, bien estructuradas, escalables y con muchas opciones como validaciones, formatos, tipados entre otros.
Al instalar FastAPI, se instalan dos módulos muy importantes:
Pydantic que permite la creación de modelos para la validación de datos.
Starlette, que es un tooltip ASGI liviano, utilizado para crear servicios web asíncronos (o síncronos) en Python.
Con estos paquetes, tenemos lo básico para crear APIs, pero, podemos extender fácilmente un proyecto en FastAPI con otros módulos para dotar a la aplicación de más características, como lo son la base de datos, motores de plantillas entre otros.
FastAPI es un framework fácil de aprender e iniciar y de alto rendimiento; es ideal para crear toda clase de sitios que no solamente consisten en APIs, si no, podemos instalar un manejador de plantillas para devolver páginas web completas.
Este curso es mayoritariamente práctico, iremos conociendo los fundamentos de FastAPI, conociendo sus características principales en base a una pequeña aplicación que iremos extendiendo capitulo tras capitulo y cuyo contenido puedes ver a continuación:
Por aquí tienes el listado completo de clases que vamos a cubrir en el libro y curso:
Introducción a FastApi
1 Introducción
2 Ambiente de desarrollo
3 Verificar el comando de acceso a Python 3 y Pip
Vamos a hacer unas pruebas para acceder a Python 3.
4 Preparar el entorno
Vamos a crear el ambiente virtual.
5 Instalar paquetes
Vamos a instalar el framework web y el servidor web.
6 Comandos básicos
Vamos a conocer algunos comandos básicos para trabajar en un proyecto en Python en general.
7 Hola Mundo
Vamos a crear un hola mundo.
8 pciones del comando de uvicorn
Veremos algunas opciones del comando.
9 Tipos de rutas
Conoceremos los tipos de rutas.
10 Parámetros en las rutas (path)
Veremos cómo usar argumentos en las rutas.
Primeros pasos con Python (Reforzamiento)
1 Introducción
2 Consola interactiva/consola de Python
Vamos a presentar como usar la consola de Python, ideal para hacer pruebas.
3 Archivos de Python
Vamos a conocer como crear los archivos para programar en Python.
4 Variables y tipo de datos
Vamos a conocer cómo emplear las variables y sus tipos de datos.
5 Operaciones matemáticas
Vamos a conocer cómo funcionan las operaciones matemáticas en Python.
6 Concatenación de String
Vamos a conocer cómo funcionan las concatenaciones de String en Python.
7 Casteos
Vamos a aprender a realizar casteos o conversión entre distintos tipos.
8 Listas
Vamos a aprender a trabajar con las listas.
9 Condicionales
Vamos a conocer el uso de los condicionales.
10 Ciclos
Vamos a conocer el uso de los ciclos while y for.
11 Funciones
Daremos los primeros pasos con las funciones en Python
12 Funciones parte 2
Daremos los primeros pasos con las funciones en Python
13 Diccionarios
Vamos a conocer el uso de los diccionarios.
14 Clases, Primeros pasos
Vamos a hablar sobre las clases, su propósito, importancia y características bases.
15 Clases, Primeras clases
Vamos a crear la primera clase y definir sus atributos y métodos.
16 Clases, Método constructor
Vamos a conocer como trabajar con los métodos constructores.
17 Clases, Herencia
Vamos a conocer cómo emplear la herencia de clases.
Ruteo en FastApi
1 Introduccion
2 Primeros pasos
Veremos cómo trabajar con la clase de APIRouter para las rutas.
3 Ruteo entre múltiples archivos
Vamos a crear un nuevo archivo para crear rutas y funciones operadoras adicionales.
4 CRUD básico
Vamos a crear un CRUD básico.
5 Prefijo en las rutas
Vamos a colocar un prefijo a las rutas de los métodos agrupados para las tareas.
6 Limitar los valores permitidos (Datos predefinidos)
Vamos a aprender a manejar valores con valores fijos.
7 Definir modelo en un archivo aparte
Vamos a colocar la clase definida antes en un archivo aparte para garantizar una aplicación modular.
8 Parámetros con Query()
Vamos a conocer cómo agregar validaciones por cotas en el query string.
9 Path con Path()
Vamos a conocer cómo agregar validaciones por cotas en e los argumentos del path.
10 Body
Vamos a aprender a pasar datos mediante el body de la petición.
11 Validación de cuerpos de solicitud utilizando modelos Pydantic
Vamos a crear una clase para manejar los parámetros de la petición
12 Validaciones en las clases bases modelos
Vamos a aplicar validaciones sobre la clase modelo.
13 Anidar clases
Aprenderemos a crear relaciones entre las clases modelos.
14 Herencia
Veremos que podemos usar las operaciones típicas en la orientación de objetos como lo es la herencia.
15 FastAPI documentación automática
Vamos a conocer los tipos de documentaciones.
16 Validación por campos
Vamos a crear validaciones locales al campo en la clase modelo.
17 Tipos de campos
Vamos a conocer como validar por campos de tipo, email, urls o en pocas palabras, estos datos con una estructura en particular.
18 Valores opcionales y valores por defecto
Vamos a conocer como trabajar con argumentos opcionales.
19 Usar una lista como argumento
Vamos a crear una propiedad en la clase de tipo lista.
20 Publicar en Github
Errores y códigos de estados
1 Introduccion
2 Códigos de estado en HTTP
Vamos a dar un repaso de los códigos de estados.
3 Personalizar el código de estado de la respuesta en los métodos
Vamos a personalizar el código de estado devuelto en la cabecera de los métodos de la api.
4 Manejo de errores
Vamos a manejar excepciones desde la aplicación.
5 Publicar en Github
Declarar solicitud de datos de ejemplo
1 introducción
introducción
2 Datos de ejemplos en modelos
Vamos a conocer como generar datos de prueba en las clases modelos.
3 Datos de ejemplos desde el argumento, Body
Vamos a conocer cómo colocar datos de ejemplos en los métodos de la API.
4 Datos de ejemplos en argumentos, primitivas
Vamos a conocer cómo colocar datos de ejemplos en los métodos de la API.
5 Otros esquemas
Upload de archivos
1 Introduccion
2 Presentación
Hablaremos como usar el upload de archivos.
3 Crear nuevo archivo de rutas
Vamos a crear el esquema de rutas para esta sección.
4 Clase File
Vamos a realizar un ejemplo de la clase File.
5 Clase UploadFile: Bases
Veremos cómo trabajar con la clase UploadFile.
6 Clase UploadFile: Guardar archivo
Vamos a aprender a guardar un archivo en una carpeta.
7 Clase UploadFile: Manejar múltiples archivos
Vamos a aprender a cargar múltiples archivos.
8 Publicar en Github
Base de datos
1 Introducción
2 Presentación
Vamos a conocer la razón de la importancia de usar una base de datos y del paquete que se va a encargar de realizar la conexión.
3 Instalar dependencias
Vamos a instalar las dependencias para la base de datos.
$ pip install sqlalchemy mysql-connector-python
4 Configurar conexión
Vamos a crear la conexión a la base de datos.
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
DATABASE_URL = "mysql+mysqlconnector://root:root@localhost:3306/tasks"
engine = create_engine(DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
5 Cambios en los modelos
Vamos a realizar unos cambios en la clase modelo actual.
6 Crear modelos (tablas) de la base de datos
Vamos a crear la clase modelo para la base de datos.
7 Crear las tablas en la base de datos
Vamos a crear las tablas (tabla) en la base de datos.
8 Errores de conexión
Vamos a ver unos posibles problemas al momento de realizar la conexion a la bd.
9 Errores: Tabla no creada
Vamos a ver unos posibles problemas en la creación de la tabla, como serían que el modelo no fue importado al igual que una conexión inválida.
10 Utilizar la conexión a la base de datos
Vamos a crear la conexión para la base de datos.
11 Inyectar dependencia de la sesión de la base de datos en las rutas
Vamos a probar la conexión a la desde los métodos de la API.
12 Obtener una tarea
Vamos a mostrar cómo obtener un registro desde la base de datos usando sqlalchemy.
13 Demo: yield vs return
Vamos a realizar una demostración de sobre el uso del yield y el return.
14 Resumen de conexión de SQLAlchemy y FastAPI
Vamos a dar un resumen de todo lo realizado en esta sección.
15 Métodos CRUD para las tareas: Detalle
Vamos a crear la conexión a la base de datos para obtener el detalle de una tarea por la PK.
16 Métodos CRUD para las tareas: Todos
Vamos a crear la conexión a la base de datos para obtener todas las tareas.
17 Métodos CRUD para las tareas: Crear
Vamos a crear la conexión a la base de datos para crear una tarea.
18 Métodos CRUD para las tareas: Actualizar
Vamos a crear la conexión a la base de datos para actualizar una tarea.
19 Métodos CRUD para las tareas: Eliminar
Vamos a crear la conexión a la base de datos para eliminar una tarea.
20 * Cambio para Pydantic 2v
* Cambio para Pydantic 2v
21 Métodos CRUD para las tareas: Paginación
Vamos a crear una paginación de tareas.
22 Relaciones en SQLAlchemy, One to Many, categorías
Crearemos la primera relación, que es de uno a muchos y veremos cómo relacionar las tareas a las categorías y crear la relación de categorías.
23 Relaciones en SQLAlchemy, One to Many, categorías
Crearemos la primera relación, que es de uno a muchos y veremos cómo relacionar las tareas a las categorías y crear la relación de categorías.
24 Cambios en el CRUD de tareas (base de datos)
Vamos a aplicar los cambios relacionales en el CRUD a la base de datos.
25 Obtener la relación desde la entidad principal
Vamos a obtener las relaciones de usuario y categoría desde la tarea.
26 Relaciones invertidas
Vamos a obtener la relación de tareas desde las categorías y usuarios.
27 Reto: Relaciones invertidas: Usuario
Vamos a obtener la relación de tareas desde los usuarios.
28 Cambios en el CRUD de tareas (métodos de la API), Listado
Adaptamos el método de listado de la rest api para que obtenga las tareas desde la base de datos.
29 Cambios en el CRUD de tareas (métodos de la API), Data de ejemplo
Moveremos la data de ejemplo para que esté definida en un archivo aparte.
30 Adaptamos el método de crear de la rest api para que crea una tarea en la base de datos.
31 Cambios en el CRUD de tareas (métodos de la API), Actualizar
Adaptamos el método de actualizar de la rest api para que actualice una tarea en la base de datos.
32 Cambios en el CRUD de tareas (métodos de la API), Detalle
Crearemos el método de detalle en la rest api.
33 Cambios en el CRUD de tareas (métodos de la API), Eliminar
Adaptamos el método de eliminar de la rest api para que elimine una tarea en la base de datos.
34 Cambios en el CRUD de tareas (métodos de la API), Verificar que el ID existe
Crearemos una validación sobre el método de detalle en el crud para verificar si el ID existe.
35 Cambios en el CRUD de tareas (métodos de la API), Retornar tarea en crear y actualizar
Vamos a colocar en el retorno al crear y actualizar la tarea manejada.
36 Integración de las clases de SQLAlchemy y Pydantic en la respuesta de los métodos de la API
Integración de las clases de SQLAlchemy y Pydantic en la respuesta de los métodos de la API
37 Modelos de Pydantic de lectura y escritura
Vamos a conocer como crear modelos en Pydantic personalizados para cada situación.
38 Remover columnas desde las consultas en SQLAlchemy
Vamos a conocer como podemos remover columnas al momento de la consulta.
39 Relación de tipo Many to Many
Vamos a conocer las relaciones de tipo muchos a muchos.
40 Relación de tipo Many to Many, Pruebas
Vamos a realizar pruebas con las relaciones de tipo muchos a muchos.
41 Emplear fechas
Vamos a conocer como establecer fechas para la creación y actualización de los registros.
42 Extra: Métodos de la API para la relación de muchos a muchos
Vamos a crear un par de métodos para agregar/remover etiquetas a la tarea.
43 backref en las relaciones de tipo muchos a muchos
Veremos cómo solucionar una excepción que ocurre al manejar la relación de muchos a muchos.
44 Publicar en Github
Template en FastAPI
1 Introducción
2 Presentación
Hablaremos sobre el motor de plantillas de Jinja.
3 Instalar y configurar Jinja en el proyecto
Vamos a instalar y configurar Jinja en el proyecto.
4 Bloques de control: Condicionales
Veremos el primer bloque de control, el condicional.
5 Bloques de control: Ciclo for
Veremos el bloque de control for.
6 Filtros
Vamos a introducir los filtros en Jinja.
7 Filtro default
Vamos a presentar el primer filtro, el que permite imprimir un contenido por defecto cuando la expresión es nula.
8 Filtro escape
Vamos a conocer cómo imprimir textos HTML o similares de manera segura.
9 Filtro conversion
Conversión entre tipos numéricos.
10 Filtro max y min
Devolver el máximo o mínimo de una lista.
11 Filtro round
Redondeamos un valor.
12 Filtro replace
Reemplazamos un texto por otro.
13 Filtro join
Vamos a conocer cómo unir textos en una lista.
14 Filtro lower y upper
Vamos a conocer cómo convertir textos a minusculas y mayusculas.
15 Filtro reverse
Vamos a conocer cómo invertir un texto o lista.
16 Filtro length
Vamos a conocer cómo obtener el tamaño de un texto o lista.
17 Filtro sort
Vamos a conocer cómo ordenar una lista.
18 Filtro slice
Vamos a conocer cómo dividir una lista en sublistas.
19 Establecer variables
Vamos a conocer cómo establecer variables en el template.
20 Bloque
Daremos una introducción a los bloques.
21 Bloque raw
Vamos a presentar el bloque con el cual podremos imprimir el contenido sin procesar.
22 Bloque macro
Vamos a conocer el equivalente de las funciones en Jinja 2.
23 Templates
Vamos a dar una introducción a los templates.
24 Herencia en los templates
Vamos a crear un template maestro para la aplicación.
25 Listado de tareas
Vamos a mostrar un listado de tareas en el template creado anteriormente.
26 Crear tarea mediante JavaScript: fetch
Vamos a crear una tarea mediante peticiones fetch en JavaScript.
27 Crear tarea mediante JavaScript: Formulario
Vamos a crear tareas mediante un formulario en HTML y peticiones fetch.
28 Crear tarea mediante JavaScript: Editar, lógica inicial
Vamos a establecer la estructura inicial para editar registros.
29 Crear tarea mediante JavaScript: Editar
Vamos a terminar los detalles para editar una tarea.
30 Crear tarea mediante JavaScript: Resumen
Vamos a implementar la fase de eliminación.
31 Crear tarea mediante JavaScript: Eliminar
Vamos a implementar la fase de eliminación.
32 Formularios en HTML, un poco de teoría
Vamos a ver y hablar sobre la implementación que vamos a llevar a cabo.
33 Formularios en HTML
Vamos a adaptar el método de creación de tareas para que pueda crear tareas mediante un formulario HTML.
34 Publicar en github
Dependencias
1 Introducción
2 Presentación
Daremos un resumen de las dependencias y veremos un ejemplo de cómo usar las dependencias mediante atributos.
3 Dependencias en el path (decorador de los métodos de la API)
Vamos a inyectar una dependencia en el decorador de las rutas.
4 Definir dependencias como variables
Vamos a conocer como reutilizar una dependencia como variable y en el argumento de las funciones.
5 Publicar en Github
Introducción a los Middleware
1 Introducción
2 Presentación
Daremos una introducción a los middleware como intermediarios entre la petición del usuario y los métodos de la API.
3 Crear un middleware
Crearemos un middleware de ejemplo que se encargue de verificar el tiempo de operación de los métodos de la API.
4 Publicar en Github
Autenticación
1 Introducción
2 Presentación
Hablaremos sobre la autenticación en la aplicación y sus posibles implementaciones en la aplicación.
3 Autenticación básica
Veremos el primer esquema más simple para trabajar con un usuario autenticado y un token.
4 Sobre la autenticación empleando la base de datos
Hablaremos sobre el desarrollo a implementar en los siguientes videos.
5 Autenticación BD: passlib
Instalamos la librería para manejar los hash.
6 Autenticación BD: Cambio modelo de usuario y modelo tokens
Vamos a crear el modelo de los tokens y colocar el campo password al usuario.
7 Autenticación BD: Schemas
Vamos a modificar el esquema de usuarios para el campo password y crear el modelo de tokens.
8 Autenticación BD: Manejo de contraseña
Vamos a crear el archivo para comparar las contraseñas, generar un hash y el token.
9 Autenticación BD: Función de login
Vamos a crear la función para hacer el login.
10 Autenticación BD: Función para crear token
Vamos a crear la función para crear el token de acceso del usuario.
11 Autenticación BD: Ruta para registrar un usuario
Vamos a crear la ruta crear un usuario.
12 Autenticación BD: Ruta para hacer el login/crear token
Vamos a crear un esquema para proteger rutas por el token autenticado.
14 Autenticación BD: Proteger rutas con usuario autenticado
Vamos a crear un método para proteger las rutas de la aplicación.
15 Autenticación BD: Logout
Vamos a implementar el logout.
16 Protección de los métodos de la API mediante la dependencia OAuth2PasswordBearer
Vamos a conocer cómo emplear la dependencia de OAuth2PasswordBearer para proteger las rutas.
17 Verificar token de acceso al momento de crear el token
Vamos a agregar condiciones adicionales para eliminar un token expirado o devolver un token válido al momento de crear el token.
18 Publicar en Github
Anotaciones, notación de Ellipsis (...) y tipos devueltos
1 Notación de Ellipsis
Vamos a conocer la notación de los 3 puntos.
2 Anotaciones/Annotated, primeros pasos
Vamos a hablar sobre el uso de las anotaciones.
3 Anotaciones/Annotated, ejemplos
Vamos a ver unos ejemplos usando las anotaciones.
4 Tipos devueltos
Vamos a conocer los tipos de datos devueltos.
Testing/Pruebas en aplicaciones de FastAPI
1 Introducción
2 Presentación
Daremos las primeras pautas en el uso de las pruebas unitarias.
3 Creando las primeras pruebas unitarias
Vamos a crear unas funciones matemáticas para introducir el uso de las pruebas unitarias.
4 Más casos
Evaluaremos otros casos en el uso de las pruebas unitarias.
5 Eliminando la repetición con pytest fixtures
Vamos a conocer cómo probar código en puntos finales.
6 Extra: Loop event, presentación
Daremos una presentación de cómo ejecutar código asíncrono en Python.
7 Extra: Loop event, primer ejemplo
Vamos a crear un primer ejemplo simple usando el loop event.
8 Extra: Loop event, segundo ejemplo
Vamos a crear un segundo ejemplo simple usando el loop event con ejecutar código en el background de manera paralela.
9 Configuraciones bases: BD y pytest.ini loop
Vamos a empezar a configurar el entorno para realizar las pruebas a nuestra API, comenzamos definiendo la BD y un archivo para habilitar el modo asíncrono en pytest.
10 Configuraciones bases: loop
Vamos a crear la función para generar el loop.
11 Configuraciones bases: client
Vamos a crear la función para generar el cliente.
12 Probar modulo de usuario: registrar, definir función
Vamos a crear el cuerpo de la función para probar el registro del usuario.
13 Probar modulo de usuario: registrar, probar
Vamos a probar la prueba unitaria creada anteriormente.
14 Probar modulo de usuario: login
Vamos a implementar la prueba unitaria para el login.
15 Probar modulo de usuario: logout
Vamos a implementar la prueba unitaria para el logout.
16 Probar modulo de tareas: crear una tarea
Vamos a implementar la prueba unitaria para crear una tarea mediante un request en JSON.
17 Probar modulo de tareas: crear una tarea (FormData)
Vamos a probar el método de creación mediante los datos establecidos en el FormData.
18 Probar modulo de tareas: actualizar una tarea
Vamos a crear la prueba para actualizar la tarea.
19 Probar modulo de tareas: obtener las tareas
Vamos a realizar la prueba para obtener todas las tareas.
20 Probar modulo de tareas: obtener por id
Vamos a realizar la prueba para obtener el detalle de una tarea.
21 Probar modulo de tareas: eliminar tareas
Probar modulo de tareas: eliminar tareas
22 Probar modulo de tareas: eliminar tareas, tarea no existe
Vamos a realizar una prueba para eliminar una tarea que no exista y concluir el tema dando un resumen del propósito de las pruebas y de qué otras pruebas se pueden implementar para nuestra api.
23 Publicar en Github
Usando TestClient de FastAPI para hacer las pruebas unitarias
1 Introducción
2 Presentación
Veremos de manera teórica como usar el módulo de TestClient junto con sus configuraciones.
3 Configuración base
Implementamos las configuraciones base de TestClient.
4 Probar modulo de usuario: registrar
Vamos a implementar la prueba unitaria para registrar un usuario.
5 Probar modulo de usuario: login
Vamos a implementar la prueba unitaria para el login.
6 Probar modulo de usuario: logout
Vamos a implementar la prueba unitaria para el logout.
7 Probar modulo de tareas: crear una tarea
Vamos a implementar la prueba unitaria para crear una tarea mediante un request en JSON.
8 Probar modulo de tareas: crear una tarea (FormData)
Vamos a probar el método de creación mediante los datos establecidos en el FormData.
9 Probar modulo de tareas: actualizar una tarea
Vamos a crear la prueba para actualizar la tarea.
10 Probar modulo de tareas: obtener las tareas
Vamos a realizar la prueba para obtener todas las tareas.
11 Probar modulo de tareas: obtener por id
Vamos a realizar la prueba para obtener el detalle de una tarea.
12 Probar modulo de tareas: eliminar tareas
Vamos a realizar la prueba para eliminar una tarea.
13 Probar modulo de tareas: eliminar tareas, tarea no existe
Vamos a realizar una prueba para eliminar una tarea que no exista y concluir el tema dando un resumen del propósito de las pruebas y de qué otras pruebas se pueden implementar para nuestra api.
14 Otras pruebas: Definir módulos
Vamos a utilizar un módulo de pytest para generar un token y probar un método de la API con un token con un valor fijo.
15 Otras pruebas: Probar token en la base de datos
Vamos a realizar la prueba para probar el token en la BD.
16 Otras pruebas: Rutas con OAuth2PasswordBearer
Vamos a crear una prueba para poder probar un recurso protegido con OAuth2PasswordBearer.
17 Conclusiones
18 Publicar en github
Aspectos generales
1 VSC: Seleccionar intérprete
Veremos cómo seleccionar el intérprete de Python para tu ambiente virtual en VSC.
2 Modo debug en VSC
Vamos a conocer como activar el modo debug en VSC.
3 Tareas en segundo plano
Vamos a conocer como trabajar con tareas pesadas.
Legacy - Declarar solicitud de datos de ejemplo Pydantic V1
1 introducción
2 Datos de ejemplos en modelos
Vamos a conocer como generar datos de prueba en las clases modelos.
3 Relaciones anidadas
Vamos a colocar las relaciones en la data de prueba del modelo.
4 Lista de opciones en los modelos
Vamos a crear una lista de opciones de los ejemplos en los modelos.
5 Datos de ejemplos en argumentos, primitivas
Vamos a conocer cómo colocar datos de ejemplos en los métodos de la API.
6 Lista de opciones en los métodos de la API
Vamos a conocer cómo colocar un listado de datos de ejemplo en las primitivas de los métodos de la API.