Introducción a FastAPI

1

¿Qué es FastAPI? con Sebastián Ramírez @Tiangolo

2

Instalación de FastAPI y creación de tu primera aplicación

3

Documentación automática con Swagger

4

Métodos HTTP en FastAPI

FastAPI Path Operations

5

Método GET en FastAPI

6

Crear parámetros de ruta en FastAPI

7

Parámetros Query en FastAPI

8

Método POST en FastAPI

9

Métodos PUT y DELETE en FastAPI

Validaciones con Pydantic

10

Creación de esquemas con Pydantic

11

Validaciones de tipos de datos con Pydantic

12

Validaciones de parámetros con Pydantic

13

JSONResponse: Tipos de respuestas en FastAPI

14

Códigos de estado HTTP en FastAPI

Autenticación en FastAPI

15

Flujo de autenticación en FastAPI

16

Generando tokens con PyJWT

17

Validando tokens con PyJWT

18

Middlewares de autenticación en FastAPI

Conexión con bases de datos en FastAPI

19

SQLAlchemy: el ORM de FastAPI

20

Instalación y configuración de SQLAlchemy

21

Creación de modelos con SQLAlchemy

22

Registro de datos con SQLAlchemy

23

Consulta de datos con SQLAlchemy

24

Modificación y eliminación de datos con SQLAlchemy

25

SQLModel: el futuro ORM de FastAPI

Modularización

26

Manejo de errores y middlewares en FastAPI

27

Creación de routers en FastAPI

28

Servicios para consultar datos

29

Servicios para registrar y modificar datos

Despliegue de Aplicación en FastAPI

30

Preparando el proyecto para desplegar a producción

31

¿Cómo elegir entre GitHub y GitLab?

32

Crear repositorio en GitLab

33

Crear Droplet en Digital Ocean

34

Instalación de herramientas para el servidor

35

Ejecutando FastAPI con NGINX

Próximos pasos

36

¿Quieres más cursos de FastAPI?

Bonus

37

Cómo crear una API de alto rendimiento en tiempo récord - Sebastián Ramírez

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de FastAPI

Curso de FastAPI

Pablo España

Pablo España

Manejo de errores y middlewares en FastAPI

26/37
Recursos

Aportes 5

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Pro tip: Podemos exportar el JWTBearer mas rápido; si haces segundo click en la clase y clickeas en "Refactorizar" (refactor) puedes elegir exportarla en un nuevo archivo, y esto funciona tanto para la clase como los imports necesarios!
Hay un error en el video, 1:42, en realidad el metodo **** `__init__(self)`**** no es ningun metodo constructor es un inicializador , hay una gran discussion alrededor de todo esto, pero los pythonistas en realidad no llamamos a esto constructor. Puedes revisar en StackOverflow init-as-a-constructor .
**Error:** ../middlewares/error\_handler.py", line 9, in ErrorHandler async def dispatch(self, request: Request, call\_next) -> Response | JSONResponse: TypeError: unsupported operand type(s) for |: 'type' and 'type' En la linea del archivo "error\_handler.py": ```python async def dispatch(self, request: Request, call_next) -> Response | JSONResponse: ```Quitar la clase: "JSONResponse:" ```js async def dispatch(self, request: Request, call_next) -> Response: ```
```js from fastapi.responses import JSONResponse from starlette.middleware.base import BaseHTTPMiddleware, RequestResponseEndpoint from fastapi import FastAPI, Request from starlette.responses import Response class ErrorHandler(BaseHTTPMiddleware): def __init__(self, app: FastAPI) -> None: super().__init__(app) async def dispatch(self, request: Request, call_next) -> Response |JSONResponse: try: return await call_next(request) except Exception as e: return JSONResponse(status_code=500, content={'error':str(e)}) ```
Usando Pycharm me manda el siguiente error al agregar el Middleware "Expected type 'Type\[\_MiddlewareClass]' (matched generic type 'Type\[\_MiddlewareClass\[ParamSpec("P")]]'), got 'Type\[ErrorHandler]' instead "from starlette.requests import Request from starlette.responses import JSONResponse class ErrorHandler: async def \_\_call\_\_(self, request: Request, call\_next): try: response = await call\_next(request) return response except Exception as e: return JSONResponse({"error": str(e)}, status\_code=500) y esta es la solución. El **ErrorHandler** debe ser de esta manera: ```python from starlette.requests import Request from starlette.responses import JSONResponse class ErrorHandler: async def __call__(self, request: Request, call_next): try: response = await call_next(request) return response except Exception as e: return JSONResponse({"error": str(e)}, status_code=500) ```from starlette.requests import Request from starlette.responses import JSONResponse class ErrorHandler: async def \_\_call\_\_(self, request: Request, call\_next): try: response = await call\_next(request) return response except Exception as e: return JSONResponse({"error": str(e)}, status\_code=500)