Cookie-Parameter-Modelle¶
Wenn Sie eine Gruppe von Cookies haben, die zusammengehören, können Sie ein Pydantic-Modell erstellen, um diese zu deklarieren. đȘ
Damit können Sie das Modell an mehreren Stellen wiederverwenden und auch Validierungen und Metadaten fĂŒr alle Parameter gleichzeitig deklarieren. đ
Hinweis
Dies wird seit FastAPI Version 0.115.0 unterstĂŒtzt. đ€
Tipp
Diese gleiche Technik gilt fĂŒr Query, Cookie und Header. đ
Cookies mit einem Pydantic-Modell¶
Deklarieren Sie die Cookie-Parameter, die Sie benötigen, in einem Pydantic-Modell, und deklarieren Sie dann den Parameter als Cookie:
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 wird die Daten fĂŒr jedes Feld aus den im Request empfangenen Cookies extrahieren und Ihnen das von Ihnen definierte Pydantic-Modell bereitstellen.
Die Dokumentation testen¶
Sie können die definierten Cookies in der DokumentationsoberflÀche unter /docs sehen:
Info
Bitte beachten Sie, dass Browser Cookies auf spezielle Weise und im Hintergrund bearbeiten, sodass sie nicht leicht JavaScript erlauben, diese zu berĂŒhren.
Wenn Sie zur API-DokumentationsoberflĂ€che unter /docs gehen, können Sie die Dokumentation fĂŒr Cookies fĂŒr Ihre Pfadoperationen sehen.
Aber selbst wenn Sie die Daten ausfĂŒllen und auf âAusfĂŒhrenâ klicken, werden aufgrund der Tatsache, dass die DokumentationsoberflĂ€che mit JavaScript arbeitet, die Cookies nicht gesendet, und Sie werden eine Fehlermeldung sehen, als ob Sie keine Werte eingegeben hĂ€tten.
ZusĂ€tzliche Cookies verbieten¶
In einigen speziellen AnwendungsfÀllen (wahrscheinlich nicht sehr hÀufig) möchten Sie möglicherweise die Cookies, die Sie empfangen möchten, einschrÀnken.
Ihre API hat jetzt die Macht, ihre eigene Cookie-Einwilligung zu kontrollieren. đ€ȘđȘ
Sie können die Modellkonfiguration von Pydantic verwenden, um extra Felder zu verbieten (forbid):
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
Wenn ein Client versucht, einige zusÀtzliche Cookies zu senden, erhÀlt er eine Error-Response.
Arme Cookie-Banner, wie sie sich mĂŒhen, Ihre Einwilligung zu erhalten, dass die API sie ablehnen darf. đȘ
Wenn der Client beispielsweise versucht, ein santa_tracker-Cookie mit einem Wert von good-list-please zu senden, erhÀlt der Client eine Error-Response, die ihm mitteilt, dass das santa_tracker Cookie nicht erlaubt ist:
{
"detail": [
{
"type": "extra_forbidden",
"loc": ["cookie", "santa_tracker"],
"msg": "Extra inputs are not permitted",
"input": "good-list-please",
}
]
}
Zusammenfassung¶
Sie können Pydantic-Modelle verwenden, um Cookies in FastAPI zu deklarieren. đ