Aller au contenu

Modèles de paramètres de cookies

🌐 Traduction par IA et humains

Cette traduction a été réalisée par une IA guidée par des humains. 🤝

Elle peut contenir des erreurs d'interprétation du sens original, ou paraître peu naturelle, etc. 🤖

Vous pouvez améliorer cette traduction en nous aidant à mieux guider le LLM d'IA.

Version anglaise

Si vous avez un groupe de cookies liés, vous pouvez créer un modèle Pydantic pour les déclarer. 🍪

Cela vous permet de réutiliser le modèle à plusieurs endroits et aussi de déclarer des validations et des métadonnées pour tous les paramètres en une seule fois. 😎

Remarque

Ceci est pris en charge depuis la version 0.115.0 de FastAPI. 🤓

Astuce

Cette même technique s'applique à Query, Cookie et Header. 😎

Déclarer des cookies avec un modèle Pydantic

Déclarez les paramètres de cookie dont vous avez besoin dans un modèle Pydantic, puis déclarez le paramètre comme 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 va extraire les données pour chaque champ à partir des cookies reçus dans la requête et vous fournir le modèle Pydantic que vous avez défini.

Consulter la documentation

Vous pouvez voir les cookies définis dans l'interface de la documentation à /docs :

Info

Gardez à l'esprit que, comme les navigateurs gèrent les cookies de manière particulière et en arrière-plan, ils n'autorisent pas facilement JavaScript à y accéder.

Si vous allez dans l'interface de la documentation de l'API à /docs, vous pourrez voir la documentation des cookies pour vos chemins d'accès.

Mais même si vous remplissez les données et cliquez sur « Execute », comme l'interface de la documentation fonctionne avec JavaScript, les cookies ne seront pas envoyés et vous verrez un message d'erreur comme si vous n'aviez saisi aucune valeur.

Interdire les cookies supplémentaires

Dans certains cas d'utilisation particuliers (probablement peu courants), vous pourriez vouloir restreindre les cookies que vous souhaitez recevoir.

Votre API a désormais le pouvoir de contrôler son propre consentement aux cookies. 🤪🍪

Vous pouvez utiliser la configuration du modèle de Pydantic pour forbid tout champ extra :

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

Si un client tente d'envoyer des cookies supplémentaires, il recevra une réponse d'erreur.

Pauvres bannières de cookies, avec tous leurs efforts pour obtenir votre consentement pour que l'API pour le rejeter. 🍪

Par exemple, si le client tente d'envoyer un cookie santa_tracker avec la valeur good-list-please, il recevra une réponse d'erreur lui indiquant que le santa_tracker le cookie n'est pas autorisé :

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

Récapitulatif

Vous pouvez utiliser des modèles Pydantic pour déclarer des cookies dans FastAPI. 😎