Ana içeriğe geç

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.

İngilizce sürüm

Şimdiye kadar şunlar gibi yaygın veri tiplerini kullanıyordunuz:

  • int
  • float
  • str
  • bool

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 str olarak temsil edilir.
  • datetime.datetime:
    • Python datetime.datetime.
    • request'lerde ve response'larda ISO 8601 formatında bir str olarak temsil edilir, örn: 2008-09-15T15:53:00+05:00.
  • datetime.date:
    • Python datetime.date.
    • request'lerde ve response'larda ISO 8601 formatında bir str olarak temsil edilir, örn: 2008-09-15.
  • datetime.time:
    • Python datetime.time.
    • request'lerde ve response'larda ISO 8601 formatında bir str olarak temsil edilir, örn: 14:23:55.003.
  • datetime.timedelta:
    • Python datetime.timedelta.
    • request'lerde ve response'larda toplam saniye sayısını ifade eden bir float olarak 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.
  • frozenset:
    • request'lerde ve response'larda, set ile 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, set değerlerinin benzersiz olduğunu belirtir (JSON Schema'nın uniqueItems özelliğini kullanarak).
  • bytes:
    • Standart Python bytes.
    • request'lerde ve response'larda str gibi ele alınır.
    • Üretilen schema, bunun binary "format"ına sahip bir str olduğunu belirtir.
  • Decimal:
    • Standart Python Decimal.
    • request'lerde ve response'larda float ile aynı şekilde işlenir.
  • 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,
    }