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

Métodos PUT y DELETE en FastAPI

9/37
Recursos

Aportes 19

Preguntas 1

Ordenar por:

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

Hay un error en conceptual en el código, no van las comas luego de cada valor a reemplazar, por eso está devolviendo una lista y no un string, ojo!!!
Codigo correcto

@app.put('/movies/{id}', tags=['movies'])
def update_movie(id: int, title: str = Body(), overview: str = Body(), year: int = Body(), rating: float = Body(), category: str = Body()):

	for item in movies:
		if item['id'] == id:
			item['title'] = title
			item['overview'] = overview
			item['year'] = year
			item['rating'] = rating
			item['category'] = category
			return movies 

reto del put, los diccionarios tiene el metodo .update() para actualizar la informacion del mismo

Creamos una ruta con el método PUT para Modificar una Película  ```python @app.put("/movies/{id}", tags = ["movies"]) def update_movie(id: int, title: str = Body(), overview: str = Body(), year: int = Body(), rating: float = Body(), category: str = Body()): for movie in movies: if movie["id"] == id: movie["title"] = title movie["overview"] = overview movie["year"] = year movie["rating"] = rating movie["category"] = category return movies ```

sabes cual es la diferencia entre PUT y PATCH?
sencillo…PUT se usa cuando quieres reemplazar completamente el recurso, por eso se pasan todos los valores de nuevo y PATCH es para actualizaciones parciales es decir solo algun elemento de todo el diccionario

En el metodo put deben quitarse las comas ya que lo convierte en lista y la idea es actualizar un dict. Y en ambos metodos, el return debe ir fuera del ciclo. ```js @app.delete('/movies/{id}', tags=["movies"]) def delete_movie(id : int): for item in movies: if item["id"] == id: movies.remove(item) return movies ```
En mi solución implemente **patch** para actualizar los valores dentro de la película de forma individual. ```js from typing import Optional @app.put("/movies/{id}", tags=["movies"]) def update_movie(id:int, title:str=Body(None), overview:str=Body(None), year:int=Body(None), rating:float=Body(None), category:str=Body(None)): for item in movies: if item["id"] == id: item.update( { "title": title, "overview": overview, "year": year, "rating": rating, "category": category } ) else: return {"message": "Movie not found"} @app.patch("/movies/{id}", tags=["movies"]) def patch_movie(id:int, title:Optional[str]=Body(None), overview:Optional[str]=Body(None), year:Optional[int]=Body(None), rating:Optional[float]=Body(None), category:Optional[str]=Body(None)): for item in movies: if item["id"] == id: if title: item.update({"title": title}) elif overview: item.update({"overview": overview}) elif year: item.update({"year": year}) elif rating: item.update({"rating": rating}) elif category: item.update({"category": category}) return item else: return {"message": "Movie not found"} @app.delete("/movies/{id}", tags=["movies"]) def delete_movie(id:int): for item in movies: if item["id"] == id: movies.remove(item) return movies else: return {"message": "Movie not found"} ```@app.put("/movies/{id}", tags=\["movies"])def update\_movie(id:int, title:str=Body(None), overview:str=Body(None), year:int=Body(None), rating:float=Body(None), category:str=Body(None)): for item in movies: if item\["id"] == id: item.update( { "title": title, "overview": overview, "year": year, "rating": rating, "category": category } ) else: return {"message": "Movie not found"} @app.patch("/movies/{id}", tags=\["movies"])def patch\_movie(id:int, title:Optional\[str]=Body(None), overview:Optional\[str]=Body(None), year:Optional\[int]=Body(None), rating:Optional\[float]=Body(None), category:Optional\[str]=Body(None)): for item in movies: if item\["id"] == id: if title: item.update({"title": title}) elif overview: item.update({"overview": overview}) elif year: item.update({"year": year}) elif rating: item.update({"rating": rating}) elif category: item.update({"category": category}) return item else: return {"message": "Movie not found"} @app.delete("/movies/{id}", tags=\["movies"])def delete\_movie(id:int): for item in movies: if item\["id"] == id: movies.remove(item) return movies else: return {"message": "Movie not found"}
Me gusto esta clase. Aqui si aprendi mucho con respecto a la programacion.
`Esta e smi solición:` ```js @app.put('/movies', tags=['Movies']) def update_movies(id: int = Body(), title: str = Body(), overview: str = Body(), year: int = Body(), rating: float = Body(), category: str = Body()): movie = next((movie for movie in movies if movie['id'] == id), None) if movie: movie["title"] = title movie["overview"] = overview movie["year"] = year movie["rating"] = rating movie["category"] = category result= [] if movie is None else movie return result @app.delete('/movies/{id}', tags=['Movies']) def delete_movie(id: int): movie = next((movie for movie in movies if movie['id'] == id), None) if movie: movies.remove(movie) result= [] if movie is None else movies return result ```@app.put('/movies', tags=\['Movies'])def update\_movies(id: int = Body(), title: str = Body(),  overview: str = Body(), year: int = Body(), rating: float = Body(), category: str = Body()):    movie = next((movie for movie in movies if movie\['id'] == id), None)    if movie:        movie\["title"]  = title        movie\["overview"] = overview        movie\["year"] = year        movie\["rating"] = rating        movie\["category"] = category    result= \[] if movie is None else movie       return result @app.delete('/movies/{id}', tags=\['Movies'])def delete\_movie(id: int):    movie = next((movie for movie in movies if movie\['id'] == id), None)    if movie:        movies.remove(movie)    result= \[] if movie is None else movies       return result       
estas e smi solucipon: @app.put('/movies', tags=\['Movies'])def update\_movies(id: int = Body(), title: str = Body(),  overview: str = Body(), year: int = Body(), rating: float = Body(), category: str = Body()):    movie = next((movie for movie in movies if movie\['id'] == id), None)    if movie:        movie\["title"]  = title        movie\["overview"] = overview        movie\["year"] = year        movie\["rating"] = rating        movie\["category"] = category    result= \[] if movie is None else movie       return result @app.delete('/movies/{id}', tags=\['Movies'])def delete\_movie(id: int):    movie = next((movie for movie in movies if movie\['id'] == id), None)    if movie:        movies.remove(movie)    result= \[] if movie is None else movies       return result       
Creamos una ruta con el método DELETE para Eliminar una Película ```python @app.delete("/movies/{id}", tags = ["movies"]) def delete_movie(id: int): for movie in movies: if movie["id"] == id: movies.remove(movie) return movies ```
```python @app.delete("/api/movies/{id}", tags=["Movies"]) def remove_movie(id: int): item_deleted = list(filter(lambda item: item["id"] == id, movies)) return ( item_deleted if item_deleted else error_404(f"No se encontro pelicula con id: {id}") ) ```**Mi metodo remove**
I shared my Compose Code so far. `@app.put( '/movie', tags=['movie'])` `def update_movie(id: int, title: str = Body(), overview: str = Body(), year: int = Body(), rating: float = Body(), category: str = Body()):` ` for item in movies: ` ` if item['id'] == id: item['title'] = title item['overview'] = overview item['year'] = year item['rating'] = rating item['category'] = category return movies ` `@app.delete('/movies/{id}', tags=["movies"])` `def delete_movie(id : int): for item in movies: if item["id"] == id: movies.remove(item) return movies`
```js @app.delete('/movies/{id}', tags=["Movies"]) def delete_movie(id: int): result = list(filter(lambda item: item['id']==id, movies)) movies.remove(result[0]) return movies ```
Ahi va mi codigo ```js @app.put('/movies/{id}',tags=['movies']) def update_movies(id:int, title:str=Body(), overview:str=Body(),year:int=Body(),rating:float=Body(),category:str=Body()): for movie in movies: if movie['id'] == id: movie['title']= title movie["overview"]= overview movie["year"]= year movie["rating"] =rating movie["category"]= category return movies @app.delete('/movies/{id}',tags=['movies']) def delete_movies(id:int): for movie in movies: if movie['id'] == id: index = movies.index(movie) movies[index]='' return movies ```

una forma de hacer Delete

@app.delete('/movies/{id}', tags=['movies'])
def deleteMovie(id: int):
    global movies
    movies = [movie for movie in movies if movie['id'] != id]
    return movies
Otra manera para hacer el codigo mas simple podria ser: @app.put('/movies/{id}', tags=\['movies'])def update\_movie(id: int, title: str = Body(), overview: str = Body(), year: int = Body(), rating: float = Body(), category: str = Body()):       movie\_to\_mod = next((movie for movie in movies\_list if movie\["id"] == id), None)     if movie\_to\_mod:        movie\_to\_mod\["title"] = title        movie\_to\_mod\["overview"] = overview        movie\_to\_mod\["year"] = year        movie\_to\_mod\["rating"] = rating        movie\_to\_mod\["category"] = category     mod\_movie = movie = next((movie for movie in movies\_list if movie\["id"] == id), \[])     return mod\_movie ```js @app.put('/movies/{id}', tags=['movies']) def update_movie(id: int, title: str = Body(), overview: str = Body(), year: int = Body(), rating: float = Body(), category: str = Body()): movie_to_mod = next((movie for movie in movies_list if movie["id"] == id), None) if movie_to_mod: movie_to_mod["title"] = title movie_to_mod["overview"] = overview movie_to_mod["year"] = year movie_to_mod["rating"] = rating movie_to_mod["category"] = category mod_movie = movie = next((movie for movie in movies_list if movie["id"] == id), []) return mod_movie ```

Por lo que veo el body() como parametro requiere que los posteriores a un body() sea tambien body(). Cuando empece a cambiarlo en el ejemplo anterior me indicaba un error que se fue yendo a medida que ponia body() en los siquientes, pero aqui le sacamos el body() al primero. Lo verifique dejando body() en el title pero sacandoselo al overview y me da error.

he aquí mi código de actualización. `@app.put('/peliculas/{id}', tags=['Peliculas'], include_in_schema=SCHEMA_VIEW)` `def update_pelicula(id: int, title: str = Body(), description: str = Body(), anio: int = Body(),` ` rating: int = Body(), genre: str = Body()):` ` for item in PELICULAS:` ` if item["id"] == id:` ` item.update({` ` "title": title,` ` "description": description,` ` "anio": anio,` ` "rating": rating,` ` "genre": genre,` ` })` ` return PELICULAS`
En mi caso, utilizando la function de python next lo hice de esta manera: `# [email protected]("/movies/{id}", tags=["movies"])def update_movie(id: int, title: str = Body(), overview: str = Body(), year: int = Body(), rating: float = Body(), category: str = Body()): movie = next((movie for movie in movies if movie["id"] == id), []) if movie: movie["title"] = title movie["overview"] = overview movie["year"] = year movie["rating"] = rating movie["category"] = category` ` return movie else: return "No se encontró la película" # [email protected]("/movies/{id}", tags=["movies"])def delete_movie(id: int): movie = next((movie for movie in movies if movie["id"] == id), []) if movie: movies.remove(movie) return movies else: return "No se encontró la película"`