FastAPI: Numerische Validierung von Path-Parametern
Verwendung mit Query-ParameternQueryDie Vorgehensweise zum Hinzufügen von Validierung ist dieselbe; Sie könnenPathDeklarieren Sie numerische Validierung und Metadaten für Pfadparameter.
Path importieren
fromfastapiImportierenPath, fromtypingImportierenAnnotated:
Beispiel
from fastapi import FastAPI, Path
app = FastAPI()
@app.get("/items/{item_id}")
async def read_items(
# Metadaten und Validierung für Pfadparameter hinzufügen
item_id: Annotated[int, Path(title="Produkt-ID", description="Produkt-ID zum Abrufen", ge=1)],
):
return {"item_id": item_id}
Pfadparameter sind immer erforderlich, da sie Teil des URL-Pfads sein müssen. Selbst wenn Sie einen Standardwert für sie deklarieren, werden sie weiterhin als erforderliche Parameter behandelt.
Numerische Validierung
PathundQueryAlle unterstützen die folgenden numerischen Validierungsparameter:
| Parameter | Bedeutung | Englische Quelle |
|---|---|---|
gt | größer als | ggrößer tals |
ge | größer als oder gleich | ggrößer als oder egleich |
lt | kleiner als | lkleiner tals |
le | kleiner als oder gleich | lkleiner als oder egleich |
Größer oder gleich (ge)
Grenzwertitem_idMuss >= 1 sein:
Beispiel
from fastapi import FastAPI, Path
app = FastAPI()
@app.get("/items/{item_id}")
async def read_items(
item_id: Annotated[int, Path(ge=1)], # item_id muss >= 1 sein
):
return {"item_id": item_id}
Kombination numerischer Validierung
Beispiel
from fastapi import FastAPI, Path, Query
app = FastAPI()
@app.get("/items/{item_id}")
async def read_items(
# item_id muss > 0 und <= 1000 sein
item_id: Annotated[int, Path(gt=0, le=1000)],
# Query-Parameter können auch numerische Validierung verwenden
size: Annotated[float, Query(gt=0, lt=10.5)] = 5.0,
):
return {"item_id": item_id, "size": size}
Validierung von Gleitkommazahlen
Numerische Validierung gilt auch für Gleitkommazahlen.gt(größer als) undgeDer Unterschied (größer als oder gleich) ist in Gleitkomma-Szenarien wichtig:
Beispiel
from fastapi import FastAPI, Path, Query
app = FastAPI()
@app.get("/items/{item_id}")
async def read_items(
item_id: Annotated[int, Path(ge=1, le=1000)],
# size muss > 0 und < 10.5 sein
# 0.5 ist ein gültiger Wert, 0.0 und 0 sind es nicht (weil gt=0 echt größer als 0 ist)
size: Annotated[float, Query(gt=0, lt=10.5)],
):
return {"item_id": item_id, "size": size}
Mischen von Pfadparametern und Abfrageparametern
Wenn Sie beides verwendenPathundQuerybei Verwendung vonAnnotatedDies kann Probleme mit der Parameterreihenfolge vermeiden:
Beispiel
from fastapi import FastAPI, Path, Query
app = FastAPI()
@app.get("/items/{item_id}")
async def read_items(
# Nach der Verwendung von Annotated spielt die Reihenfolge der Parameter keine Rolle
item_id: Annotated[int, Path(title="Produkt-ID", ge=1, le=1000)],
q: Annotated[str | None, Query(max_length=50)] = None,
):
results = {"item_id": item_id}
if q:
results.update({"q": q})
return results
Zusammenfassung
Wichtige Punkte zur numerischen Validierung für Pfadparameter:
- Nutzung
Annotated+PathValidierungsregeln für Pfadparameter deklarieren - Numerische Validierung:
gt(größer als),ge(größer oder gleich),lt(kleiner als),le(kleiner oder gleich) PathundQueryDieselben Validierungsparameter werden verwendet, einschließlich Zeichenfolgenvalidierung (min_lengthusw.) und Metadaten (title、descriptionusw.)- Pfadparameter sind immer erforderlich, unabhängig davon, ob ein Standardwert deklariert wird.