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 typing import Annotated
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:

ParameterBedeutungEnglische Quelle
gtgrößer alsggrößer tals
gegrößer als oder gleichggrößer als oder egleich
ltkleiner alslkleiner tals
lekleiner als oder gleichlkleiner als oder egleich

Größer oder gleich (ge)

Grenzwertitem_idMuss >= 1 sein:

Beispiel

from typing import Annotated
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 typing import Annotated
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 typing import Annotated
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 typing import Annotated
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:

  • NutzungAnnotated + 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.
Weitere Erweiterungen