Ana içeriğe geç

Cookie Parametre Modelleri

🌐 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

Birbirleriyle ilişkili bir cookie grubunuz varsa, bunları tanımlamak için bir Pydantic model oluşturabilirsiniz. 🍪

Bu sayede model'i yeniden kullanabilir, birden fazla yerde tekrar tekrar kullanabilir ve tüm parametreler için validation ve metadata'yı tek seferde tanımlayabilirsiniz. 😎

Not

This is supported since FastAPI version 0.115.0. 🤓

İpucu

Aynı teknik Query, Cookie ve Header için de geçerlidir. 😎

Pydantic Model ile Cookies

İhtiyacınız olan cookie parametrelerini bir Pydantic model içinde tanımlayın ve ardından parametreyi Cookie olarak bildirin:

from typing import Annotated

from fastapi import Cookie, FastAPI
from pydantic import BaseModel

app = FastAPI()


class Cookies(BaseModel):
    session_id: str
    fatebook_tracker: str | None = None
    googall_tracker: str | None = None


@app.get("/items/")
async def read_items(cookies: Annotated[Cookies, Cookie()]):
    return cookies
🤓 Other versions and variants

Tip

Prefer to use the Annotated version if possible.

from fastapi import Cookie, FastAPI
from pydantic import BaseModel

app = FastAPI()


class Cookies(BaseModel):
    session_id: str
    fatebook_tracker: str | None = None
    googall_tracker: str | None = None


@app.get("/items/")
async def read_items(cookies: Cookies = Cookie()):
    return cookies

FastAPI, request ile gelen cookies içinden her bir field için veriyi extract eder ve size tanımladığınız Pydantic model'i verir.

Dokümanları Kontrol Edin

Tanımlanan cookie'leri /docs altındaki docs UI'da görebilirsiniz:

Bilgi

Tarayıcıların cookie'leri özel biçimlerde ve arka planda yönetmesi nedeniyle, JavaScript'in cookie'lere erişmesine kolayca izin vermediğini aklınızda bulundurun.

/docs altındaki API docs UI'a giderseniz, path operation'larınız için cookie'lerin dokümantasyonunu görebilirsiniz.

Ancak verileri doldurup "Execute" düğmesine tıklasanız bile, docs UI JavaScript ile çalıştığı için cookie'ler gönderilmez; dolayısıyla hiç değer girmemişsiniz gibi bir error mesajı görürsünüz.

Fazladan Cookie'leri Yasaklayın

Bazı özel kullanım senaryolarında (muhtemelen çok yaygın değildir) almak istediğiniz cookie'leri kısıtlamak isteyebilirsiniz.

API'niz artık kendi cookie onayı'nı kontrol etme gücüne sahip. 🤪🍪

Pydantic'in model configuration'ını kullanarak extra olan herhangi bir field'ı forbid edebilirsiniz:

from typing import Annotated

from fastapi import Cookie, FastAPI
from pydantic import BaseModel

app = FastAPI()


class Cookies(BaseModel):
    model_config = {"extra": "forbid"}

    session_id: str
    fatebook_tracker: str | None = None
    googall_tracker: str | None = None


@app.get("/items/")
async def read_items(cookies: Annotated[Cookies, Cookie()]):
    return cookies
🤓 Other versions and variants

Tip

Prefer to use the Annotated version if possible.

from fastapi import Cookie, FastAPI
from pydantic import BaseModel

app = FastAPI()


class Cookies(BaseModel):
    model_config = {"extra": "forbid"}

    session_id: str
    fatebook_tracker: str | None = None
    googall_tracker: str | None = None


@app.get("/items/")
async def read_items(cookies: Cookies = Cookie()):
    return cookies

Bir client fazladan cookie göndermeye çalışırsa, bir error response alır.

Onayınızı almak için bunca çaba harcayan zavallı cookie banner'ları... API'nin bunu reddetmesi için. 🍪

Örneğin client, değeri good-list-please olan bir santa_tracker cookie'si göndermeye çalışırsa, client santa_tracker cookie'ye izin verilmiyor diyen bir error response alır:

{
    "detail": [
        {
            "type": "extra_forbidden",
            "loc": ["cookie", "santa_tracker"],
            "msg": "Extra inputs are not permitted",
            "input": "good-list-please",
        }
    ]
}

Özet

FastAPI'de cookie tanımlamak için Pydantic model'lerini kullanabilirsiniz. 😎