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.
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. 😎