Types de données supplémentaires¶
🌐 Traduction par IA et humains
Cette traduction a été réalisée par une IA guidée par des humains. 🤝
Elle peut contenir des erreurs d'interprétation du sens original, ou paraître peu naturelle, etc. 🤖
Vous pouvez améliorer cette traduction en nous aidant à mieux guider le LLM d'IA.
Jusqu'à présent, vous avez utilisé des types de données courants, comme :
intfloatstrbool
Mais vous pouvez aussi utiliser des types de données plus complexes.
Et vous bénéficierez toujours des mêmes fonctionnalités que jusqu'à présent :
- Excellente prise en charge dans l'éditeur.
- Conversion des données à partir des requêtes entrantes.
- Conversion des données pour les données de réponse.
- Validation des données.
- Annotations et documentation automatiques.
Autres types de données¶
Voici quelques types de données supplémentaires que vous pouvez utiliser :
UUID:- Un « identifiant universel unique » standard, couramment utilisé comme ID dans de nombreuses bases de données et systèmes.
- Dans les requêtes et les réponses, il sera représenté sous forme de
str.
datetime.datetime:- Un
datetime.datetimePython. - Dans les requêtes et les réponses, il sera représenté sous forme de
strau format ISO 8601, par exemple :2008-09-15T15:53:00+05:00.
- Un
datetime.date:datetime.datePython.- Dans les requêtes et les réponses, il sera représenté sous forme de
strau format ISO 8601, par exemple :2008-09-15.
datetime.time:- Un
datetime.timePython. - Dans les requêtes et les réponses, il sera représenté sous forme de
strau format ISO 8601, par exemple :14:23:55.003.
- Un
datetime.timedelta:- Un
datetime.timedeltaPython. - Dans les requêtes et les réponses, il sera représenté sous forme de
floatde secondes totales. - Pydantic permet aussi de le représenter sous la forme d'un « encodage de différence de temps ISO 8601 », voir la documentation pour plus d'informations.
- Un
frozenset:- Dans les requêtes et les réponses, traité de la même manière qu'un
set:- Dans les requêtes, une liste sera lue, les doublons éliminés, puis convertie en
set. - Dans les réponses, le
setsera converti enlist. - Le schéma généré indiquera que les valeurs du
setsont uniques (en utilisantuniqueItemsde JSON Schema).
- Dans les requêtes, une liste sera lue, les doublons éliminés, puis convertie en
- Dans les requêtes et les réponses, traité de la même manière qu'un
bytes:bytesPython standard.- Dans les requêtes et les réponses, traité comme une
str. - Le schéma généré indiquera qu'il s'agit d'une
stravec le « format »binary.
Decimal:DecimalPython standard.- Dans les requêtes et les réponses, géré de la même manière qu'un
float.
- Vous pouvez consulter tous les types de données Pydantic valides ici : Types de données Pydantic.
Exemple¶
Voici un exemple de chemin d'accès avec des paramètres utilisant certains des types ci-dessus.
from datetime import datetime, time, timedelta
from typing import Annotated
from uuid import UUID
from fastapi import Body, FastAPI
app = FastAPI()
@app.put("/items/{item_id}")
async def read_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_after
duration = end_datetime - start_process
return {
"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 the Annotated version if possible.
from datetime import datetime, time, timedelta
from uuid import UUID
from fastapi import Body, FastAPI
app = FastAPI()
@app.put("/items/{item_id}")
async def read_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_after
duration = end_datetime - start_process
return {
"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,
}
Notez que les paramètres à l'intérieur de la fonction ont leur type de données naturel et que vous pouvez, par exemple, effectuer des manipulations de dates normales, comme :
from datetime import datetime, time, timedelta
from typing import Annotated
from uuid import UUID
from fastapi import Body, FastAPI
app = FastAPI()
@app.put("/items/{item_id}")
async def read_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_after
duration = end_datetime - start_process
return {
"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 the Annotated version if possible.
from datetime import datetime, time, timedelta
from uuid import UUID
from fastapi import Body, FastAPI
app = FastAPI()
@app.put("/items/{item_id}")
async def read_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_after
duration = end_datetime - start_process
return {
"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,
}