Cookie Parameter Models¶
🌐 Translation by AI and humans
This translation was made by AI guided by humans. 🤝
It could have mistakes of misunderstanding the original meaning, or looking unnatural, etc. 🤖
You can improve this translation by helping us guide the AI LLM better.
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
Bu özellik FastAPI 0.115.0 sürümünden beri desteklenmektedir.
İ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
from typing import Annotated, Union
from fastapi import Cookie, FastAPI
from pydantic import BaseModel
app = FastAPI()
class Cookies(BaseModel):
session_id: str
fatebook_tracker: Union[str, None] = None
googall_tracker: Union[str, None] = None
@app.get("/items/")
async def read_items(cookies: Annotated[Cookies, Cookie()]):
return cookies
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
Tip
Prefer to use the Annotated version if possible.
from typing import Union
from fastapi import Cookie, FastAPI
from pydantic import BaseModel
app = FastAPI()
class Cookies(BaseModel):
session_id: str
fatebook_tracker: Union[str, None] = None
googall_tracker: Union[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 Cookies'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 consent'ı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
from typing import Annotated, Union
from fastapi import Cookie, FastAPI
from pydantic import BaseModel
app = FastAPI()
class Cookies(BaseModel):
model_config = {"extra": "forbid"}
session_id: str
fatebook_tracker: Union[str, None] = None
googall_tracker: Union[str, None] = None
@app.get("/items/")
async def read_items(cookies: Annotated[Cookies, Cookie()]):
return cookies
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
Tip
Prefer to use the Annotated version if possible.
from typing import Union
from fastapi import Cookie, FastAPI
from pydantic import BaseModel
app = FastAPI()
class Cookies(BaseModel):
model_config = {"extra": "forbid"}
session_id: str
fatebook_tracker: Union[str, None] = None
googall_tracker: Union[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 is not allowed 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 cookies tanımlamak için Pydantic model'lerini kullanabilirsiniz. 😎