Zum Inhalt

Formularmodelle

🌐 Ü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

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

Hinweis

Um Formulare zu verwenden, installieren Sie zuerst python-multipart.

Stellen Sie sicher, dass Sie eine Virtuelle Umgebung erstellen, sie aktivieren und es dann installieren, zum Beispiel:

$ pipinstallpython-multipart

Hinweis

Dies wird seit FastAPI Version 0.113.0 unterstützt. 🤓

Pydantic-Modelle für Formulare

Sie müssen nur ein Pydantic-Modell mit den Feldern deklarieren, die Sie als Formularfelder erhalten möchten, und dann den Parameter als Form deklarieren:

fromtypingimport Annotated
fromfastapiimport FastAPI, Form
frompydanticimport BaseModel
app = FastAPI()
classFormData(BaseModel):
 username: str
 password: str
@app.post("/login/")
async deflogin(data: Annotated[FormData, Form()]):
 return data
🤓 Other versions and variants

Tip

Prefer to use the Annotated version if possible.

fromfastapiimport FastAPI, Form
frompydanticimport BaseModel
app = FastAPI()
classFormData(BaseModel):
 username: str
 password: str
@app.post("/login/")
async deflogin(data: FormData = Form()):
 return data

FastAPI wird die Daten für jedes Feld aus den Formulardaten im Request extrahieren und Ihnen das von Ihnen definierte Pydantic-Modell übergeben.

Die Dokumentation testen

Sie können dies in der Dokumentations-UI unter /docs testen:

Zusätzliche Formularfelder verbieten

In einigen speziellen Anwendungsfällen (wahrscheinlich nicht sehr häufig) möchten Sie möglicherweise die Formularfelder auf nur diejenigen beschränken, die im Pydantic-Modell deklariert sind, und jegliche zusätzlichen Felder verbieten.

Hinweis

Dies wird seit FastAPI Version 0.114.0 unterstützt. 🤓

Sie können die Modellkonfiguration von Pydantic verwenden, um jegliche extra Felder zu verbieten:

fromtypingimport Annotated
fromfastapiimport FastAPI, Form
frompydanticimport BaseModel
app = FastAPI()
classFormData(BaseModel):
 username: str
 password: str
 model_config = {"extra": "forbid"}
@app.post("/login/")
async deflogin(data: Annotated[FormData, Form()]):
 return data
🤓 Other versions and variants

Tip

Prefer to use the Annotated version if possible.

fromfastapiimport FastAPI, Form
frompydanticimport BaseModel
app = FastAPI()
classFormData(BaseModel):
 username: str
 password: str
 model_config = {"extra": "forbid"}
@app.post("/login/")
async deflogin(data: FormData = Form()):
 return data

Wenn ein Client versucht, einige zusätzliche Daten zu senden, erhält er eine Error-Response.

Zum Beispiel, wenn der Client versucht, folgende Formularfelder zu senden:

  • username: Rick
  • password: Portal Gun
  • extra: Mr. Poopybutthole

erhält er eine Error-Response, die ihm mitteilt, dass das Feld extra nicht erlaubt ist:

{
"detail":[
{
"type":"extra_forbidden",
"loc":["body","extra"],
"msg":"Extra inputs are not permitted",
"input":"Mr. Poopybutthole"
}
]
}

Zusammenfassung

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

AltStyle によって変換されたページ (->オリジナル) /