Tipos de Datos Extra¶
🌐 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.
Hasta ahora, has estado usando tipos de datos comunes, como:
intfloatstrbool
Pero también puedes usar tipos de datos más complejos.
Y seguirás teniendo las mismas funcionalidades como hasta ahora:
- Gran soporte de editor.
- Conversión de datos de requests entrantes.
- Conversión de datos para datos de response.
- Validación de datos.
- Anotación y documentación automática.
Otros tipos de datos¶
Aquí hay algunos de los tipos de datos adicionales que puedes usar:
UUID:- Un "Identificador Universalmente Único" estándar, común como un ID en muchas bases de datos y sistemas.
- En requests y responses se representará como un
str.
datetime.datetime:- Un
datetime.datetimede Python. - En requests y responses se representará como un
stren formato ISO 8601, como:2008-09-15T15:53:00+05:00.
- Un
datetime.date:datetime.datede Python.- En requests y responses se representará como un
stren formato ISO 8601, como:2008-09-15.
datetime.time:- Un
datetime.timede Python. - En requests y responses se representará como un
stren formato ISO 8601, como:14:23:55.003.
- Un
datetime.timedelta:- Un
datetime.timedeltade Python. - En requests y responses se representará como un
floatde segundos totales. - Pydantic también permite representarlo como una "codificación de diferencia horaria ISO 8601",consulta la documentación para más información.
- Un
frozenset:- En requests y responses, tratado igual que un
set:- En requests, se leerá una list, eliminando duplicados y convirtiéndola en un
set. - En responses, el
setse convertirá en unalist. - El esquema generado especificará que los valores del
setson únicos (usandouniqueItemsde JSON Schema).
- En requests, se leerá una list, eliminando duplicados y convirtiéndola en un
- En requests y responses, tratado igual que un
bytes:bytesestándar de Python.- En requests y responses se tratará como
str. - El esquema generado especificará que es un
strcon "binary" como "format".
Decimal:Decimalestándar de Python.- En requests y responses, manejado igual que un
float.
- Puedes revisar todos los tipos de datos válidos de Pydantic aquí:Tipos de datos de Pydantic.
Ejemplo¶
Aquí tienes un ejemplo de unapath operation con parámetros usando algunos de los tipos anteriores.
fromdatetimeimportdatetime,time,timedeltafromtypingimportAnnotatedfromuuidimportUUIDfromfastapiimportBody,FastAPIapp=FastAPI()@app.put("/items/{item_id}")asyncdefread_items(item_id:UUID,start_datetime:Annotated[datetime,Body()],end_datetime:Annotated[datetime,Body()],process_after:Annotated[timedelta,Body()],repeat_at:Annotated[time|None,Body()]=None,):start_process=start_datetime+process_afterduration=end_datetime-start_processreturn{"item_id":item_id,"start_datetime":start_datetime,"end_datetime":end_datetime,"process_after":process_after,"repeat_at":repeat_at,"start_process":start_process,"duration":duration,}🤓 Other versions and variants
Tip
Prefer to use theAnnotated version if possible.
fromdatetimeimportdatetime,time,timedeltafromuuidimportUUIDfromfastapiimportBody,FastAPIapp=FastAPI()@app.put("/items/{item_id}")asyncdefread_items(item_id:UUID,start_datetime:datetime=Body(),end_datetime:datetime=Body(),process_after:timedelta=Body(),repeat_at:time|None=Body(default=None),):start_process=start_datetime+process_afterduration=end_datetime-start_processreturn{"item_id":item_id,"start_datetime":start_datetime,"end_datetime":end_datetime,"process_after":process_after,"repeat_at":repeat_at,"start_process":start_process,"duration":duration,}Nota que los parámetros dentro de la función tienen su tipo de dato natural, y puedes, por ejemplo, realizar manipulaciones de fechas normales, como:
fromdatetimeimportdatetime,time,timedeltafromtypingimportAnnotatedfromuuidimportUUIDfromfastapiimportBody,FastAPIapp=FastAPI()@app.put("/items/{item_id}")asyncdefread_items(item_id:UUID,start_datetime:Annotated[datetime,Body()],end_datetime:Annotated[datetime,Body()],process_after:Annotated[timedelta,Body()],repeat_at:Annotated[time|None,Body()]=None,):start_process=start_datetime+process_afterduration=end_datetime-start_processreturn{"item_id":item_id,"start_datetime":start_datetime,"end_datetime":end_datetime,"process_after":process_after,"repeat_at":repeat_at,"start_process":start_process,"duration":duration,}🤓 Other versions and variants
Tip
Prefer to use theAnnotated version if possible.
fromdatetimeimportdatetime,time,timedeltafromuuidimportUUIDfromfastapiimportBody,FastAPIapp=FastAPI()@app.put("/items/{item_id}")asyncdefread_items(item_id:UUID,start_datetime:datetime=Body(),end_datetime:datetime=Body(),process_after:timedelta=Body(),repeat_at:time|None=Body(default=None),):start_process=start_datetime+process_afterduration=end_datetime-start_processreturn{"item_id":item_id,"start_datetime":start_datetime,"end_datetime":end_datetime,"process_after":process_after,"repeat_at":repeat_at,"start_process":start_process,"duration":duration,}






