Ek Veri Tipleri¶
🌐 Yapay Zekâ ve İnsanlar Tarafından Çeviri
Bu çeviri, insanlar tarafından yönlendirilen bir yapay zekâ ile oluşturuldu. 🤝
Orijinal anlamın yanlış anlaşılması ya da kulağa doğal gelmeme gibi hatalar içerebilir. 🤖
Yapay zekâ LLM'ini daha iyi yönlendirmemize yardımcı olarak bu çeviriyi iyileştirebilirsiniz.
Şimdiye kadar şunlar gibi yaygın veri tiplerini kullanıyordunuz:
intfloatstrbool
Ancak daha karmaşık veri tiplerini de kullanabilirsiniz.
Ve yine, şimdiye kadar gördüğünüz özelliklerin aynısına sahip olursunuz:
- Harika editör desteği.
- Gelen request'lerden veri dönüştürme.
- response verileri için veri dönüştürme.
- Veri doğrulama.
- Otomatik annotation ve dokümantasyon.
Diğer veri tipleri¶
Kullanabileceğiniz ek veri tiplerinden bazıları şunlardır:
UUID:- Birçok veritabanı ve sistemde ID olarak yaygın kullanılan, standart bir "Universally Unique Identifier".
- request'lerde ve response'larda
strolarak temsil edilir.
datetime.datetime:- Python
datetime.datetime. - request'lerde ve response'larda ISO 8601 formatında bir
strolarak temsil edilir, örn:2008-09-15T15:53:00+05:00.
- Python
datetime.date:- Python
datetime.date. - request'lerde ve response'larda ISO 8601 formatında bir
strolarak temsil edilir, örn:2008-09-15.
- Python
datetime.time:- Python
datetime.time. - request'lerde ve response'larda ISO 8601 formatında bir
strolarak temsil edilir, örn:14:23:55.003.
- Python
datetime.timedelta:- Python
datetime.timedelta. - request'lerde ve response'larda toplam saniye sayısını ifade eden bir
floatolarak temsil edilir. - Pydantic, bunu ayrıca bir "ISO 8601 time diff encoding" olarak temsil etmeye de izin verir, daha fazla bilgi için dokümanlara bakın.
- Python
frozenset:- request'lerde ve response'larda,
setile aynı şekilde ele alınır:- request'lerde bir list okunur, tekrarlar kaldırılır ve
set'e dönüştürülür. - response'larda
set,list'e dönüştürülür. - Üretilen schema,
setdeğerlerinin benzersiz olduğunu belirtir (JSON Schema'nınuniqueItemsözelliğini kullanarak).
- request'lerde bir list okunur, tekrarlar kaldırılır ve
- request'lerde ve response'larda,
bytes:- Standart Python
bytes. - request'lerde ve response'larda
strgibi ele alınır. - Üretilen schema, bunun
binary"format"ına sahip birstrolduğunu belirtir.
- Standart Python
Decimal:- Standart Python
Decimal. - request'lerde ve response'larda
floatile aynı şekilde işlenir.
- Standart Python
- Geçerli tüm Pydantic veri tiplerini burada görebilirsiniz: Pydantic veri tipleri.
Örnek¶
Yukarıdaki tiplerden bazılarını kullanan parametrelere sahip bir örnek path operation.
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,
}
Fonksiyonun içindeki parametrelerin doğal veri tiplerinde olduğunu unutmayın; örneğin normal tarih işlemleri yapabilirsiniz:
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,
}