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.
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.
Consultez les documents¶
Vous pouvez voir les cookies définis dans l'interface des documents à /docs :
Remarque
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 des documents 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 des documents 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 le rejette. 🍪
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 cookie santa_tracker n'est pas autorisé :
{
"detail": [
{
"type": "extra_forbidden",
"loc": ["cookie", "santa_tracker"],
"msg": "Extra inputs are not permitted",
"input": "good-list-please",
}
]
}
Combiner des modèles de paramètres¶
Vous pouvez combiner plusieurs modèles de paramètres de cookies avec des paramètres de cookies individuels et des dépendances. Chaque modèle est extrait et validé indépendamment, comme expliqué pour les modèles de paramètres de requête.
La configuration extra de chaque modèle s'applique à tous les paramètres de cookies, y compris ceux déclarés dans d'autres modèles ou dépendances. Avec extra="forbid", tout cookie en dehors de ce modèle est rejeté. Avec extra="allow", ces cookies sont inclus comme champs supplémentaires du modèle.
Modèles de paramètres de cookies optionnels¶
Déclarez un modèle de paramètres de cookies avec | None et une valeur par défaut de None pour rendre le groupe optionnel.
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
Si ni theme ni locale ne sont envoyés, preferences vaut None. Si l'un des deux est envoyé, FastAPI valide le modèle et exige les deux champs.
Les mêmes règles concernant les valeurs par défaut, les champs supplémentaires et OpenAPI s'appliquent que pour les modèles de paramètres de requête optionnels.
Récapitulatif¶
Vous pouvez utiliser des modèles Pydantic pour déclarer des cookies dans FastAPI. 😎