Zum Inhalt

Cookie-Parameter-Modelle

AI coding agents

Use the official FastAPI skill for your installed version. Install it from your project directory:

uvx library-skills

See Develop with AI.

🌐 Übersetzung durch KI und Menschen

Diese Übersetzung wurde von KI erstellt, angeleitet von Menschen. 🤝

Sie könnte Fehler enthalten, etwa Missverständnisse des ursprünglichen Sinns oder unnatürliche Formulierungen, usw. 🤖

Sie können diese Übersetzung verbessern, indem Sie uns helfen, die KI-LLM besser anzuleiten.

Englische Version

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

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 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:

Hinweis

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

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

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",
        }
    ]
}

Parametermodelle kombinieren

Sie können mehrere Cookie-Parameter-Modelle mit einzelnen Cookie-Parametern und Abhängigkeiten kombinieren. Jedes Modell wird unabhängig extrahiert und validiert, wie für Query-Parameter-Modelle erklärt.

Die extra-Konfiguration jedes Modells gilt für alle Cookie-Parameter, einschließlich derjenigen, die in anderen Modellen oder Abhängigkeiten deklariert sind. Mit extra="forbid" wird jedes Cookie außerhalb dieses Modells abgelehnt. Mit extra="allow" werden diese Cookies als zusätzliche Felder in das Modell aufgenommen.

Deklarieren Sie ein Cookie-Parameter-Modell mit | None und einem Defaultwert von None, um die Gruppe optional zu machen.

from typing import Annotated

from fastapi import Cookie, FastAPI
from pydantic import BaseModel

app = FastAPI()


class Preferences(BaseModel):
    theme: str
    locale: str


@app.get("/items/")
async def read_items(preferences: Annotated[Preferences | None, Cookie()] = None):
    return preferences
🤓 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 Preferences(BaseModel):
    theme: str
    locale: str


@app.get("/items/")
async def read_items(preferences: Preferences | None = Cookie(default=None)):
    return preferences

Wenn weder theme noch locale gesendet wird, ist preferences gleich None. Wenn eines davon gesendet wird, validiert FastAPI das Modell und erfordert beide Felder.

Es gelten dieselben Regeln für Defaultwerte, zusätzliche Felder und OpenAPI wie für optionale Query-Parameter-Modelle.

Zusammenfassung

Sie können Pydantic-Modelle verwenden, um Cookies in FastAPI zu deklarieren. 😎