Movatterモバイル変換


[0]ホーム

URL:


Saltar a contenido
Join theFastAPI Cloud waiting list 🚀
Follow@fastapi onX (Twitter) to stay updated
FollowFastAPI onLinkedIn to stay updated
Subscribe to theFastAPI and friends newsletter 🎉
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor

Usando Dataclasses

🌐 Traducción por IA y humanos

Esta traducción fue hecha por IA guiada por humanos. 🤝

Podría tener errores al interpretar el significado original, o sonar poco natural, etc. 🤖

Puedes mejorar esta traducciónayudándonos a guiar mejor al LLM de IA.

Versión en inglés

FastAPI está construido sobrePydantic, y te he estado mostrando cómo usar modelos de Pydantic para declarar requests y responses.

Pero FastAPI también soporta el uso dedataclasses de la misma manera:

fromdataclassesimportdataclassfromfastapiimportFastAPI@dataclassclassItem:name:strprice:floatdescription:str|None=Nonetax:float|None=Noneapp=FastAPI()@app.post("/items/")asyncdefcreate_item(item:Item):returnitem

Esto sigue siendo soportado gracias aPydantic, ya que tienesoporte interno paradataclasses.

Así que, incluso con el código anterior que no usa Pydantic explícitamente, FastAPI está usando Pydantic para convertir esos dataclasses estándar en su propia versión de dataclasses de Pydantic.

Y por supuesto, soporta lo mismo:

  • validación de datos
  • serialización de datos
  • documentación de datos, etc.

Esto funciona de la misma manera que con los modelos de Pydantic. Y en realidad se logra de la misma manera internamente, utilizando Pydantic.

Información

Ten en cuenta que los dataclasses no pueden hacer todo lo que los modelos de Pydantic pueden hacer.

Así que, podrías necesitar seguir usando modelos de Pydantic.

Pero si tienes un montón de dataclasses por ahí, este es un buen truco para usarlos para potenciar una API web usando FastAPI. 🤓

Dataclasses enresponse_model

También puedes usardataclasses en el parámetroresponse_model:

fromdataclassesimportdataclass,fieldfromfastapiimportFastAPI@dataclassclassItem:name:strprice:floattags:list[str]=field(default_factory=list)description:str|None=Nonetax:float|None=Noneapp=FastAPI()@app.get("/items/next",response_model=Item)asyncdefread_next_item():return{"name":"Island In The Moon","price":12.99,"description":"A place to be playin' and havin' fun","tags":["breater"],}

El dataclass será automáticamente convertido a un dataclass de Pydantic.

De esta manera, su esquema aparecerá en la interfaz de usuario de la documentación de la API:

Dataclasses en Estructuras de Datos Anidadas

También puedes combinardataclasses con otras anotaciones de tipos para crear estructuras de datos anidadas.

En algunos casos, todavía podrías tener que usar la versión dedataclasses de Pydantic. Por ejemplo, si tienes errores con la documentación de la API generada automáticamente.

En ese caso, simplemente puedes intercambiar losdataclasses estándar conpydantic.dataclasses, que es un reemplazo directo:

fromdataclassesimportfield# (1)fromfastapiimportFastAPIfrompydantic.dataclassesimportdataclass# (2)@dataclassclassItem:name:strdescription:str|None=None@dataclassclassAuthor:name:stritems:list[Item]=field(default_factory=list)# (3)app=FastAPI()@app.post("/authors/{author_id}/items/",response_model=Author)# (4)asyncdefcreate_author_items(author_id:str,items:list[Item]):# (5)return{"name":author_id,"items":items}# (6)@app.get("/authors/",response_model=list[Author])# (7)defget_authors():# (8)return[# (9){"name":"Breaters","items":[{"name":"Island In The Moon","description":"A place to be playin' and havin' fun",},{"name":"Holy Buddies"},],},{"name":"System of an Up","items":[{"name":"Salt","description":"The kombucha mushroom people's favorite",},{"name":"Pad Thai"},{"name":"Lonely Night","description":"The mostests lonliest nightiest of allest",},],},]
  1. Todavía importamosfield de losdataclasses estándar.

  2. pydantic.dataclasses es un reemplazo directo paradataclasses.

  3. El dataclassAuthor incluye una lista de dataclassesItem.

  4. El dataclassAuthor se usa como el parámetroresponse_model.

  5. Puedes usar otras anotaciones de tipos estándar con dataclasses como el request body.

    En este caso, es una lista de dataclassesItem.

  6. Aquí estamos regresando un diccionario que contieneitems, que es una lista de dataclasses.

    FastAPI todavía es capaz deserializar los datos a JSON.

  7. Aquí elresponse_model está usando una anotación de tipo de una lista de dataclassesAuthor.

    Nuevamente, puedes combinardataclasses con anotaciones de tipos estándar.

  8. Nota que estapath operation function usadef regular en lugar deasync def.

    Como siempre, en FastAPI puedes combinardef yasync def según sea necesario.

    Si necesitas un repaso sobre cuándo usar cuál, revisa la sección"¿Con prisa?" en la documentación sobreasync yawait.

  9. Estapath operation function no está devolviendo dataclasses (aunque podría), sino una lista de diccionarios con datos internos.

    FastAPI usará el parámetroresponse_model (que incluye dataclasses) para convertir el response.

Puedes combinardataclasses con otras anotaciones de tipos en muchas combinaciones diferentes para formar estructuras de datos complejas.

Revisa las anotaciones en el código arriba para ver más detalles específicos.

Aprende Más

También puedes combinardataclasses con otros modelos de Pydantic, heredar de ellos, incluirlos en tus propios modelos, etc.

Para saber más, revisa ladocumentación de Pydantic sobre dataclasses.

Versión

Esto está disponible desde la versión0.67.0 de FastAPI. 🔖


[8]ページ先頭

©2009-2026 Movatter.jp