Den Request direkt verwenden¶
Bisher haben Sie die Teile des Requests, die Sie benötigen, mithilfe von deren Typen deklariert.
Daten nehmend von:
- Dem Pfad als Parameter.
- Headern.
- Cookies.
- usw.
Und indem Sie das tun, validiert FastAPI diese Daten, konvertiert sie und generiert automatisch Dokumentation für Ihre API.
Es gibt jedoch Situationen, in denen Sie möglicherweise direkt auf das Request
-Objekt zugreifen müssen.
Details zum Request
-Objekt¶
Da FastAPI unter der Haube eigentlich Starlette ist, mit einer Ebene von mehreren Tools darüber, können Sie Starlette's Request
-Objekt direkt verwenden, wenn Sie es benötigen.
Das bedeutet allerdings auch, dass, wenn Sie Daten direkt vom Request
-Objekt nehmen (z. B. dessen Body lesen), diese von FastAPI nicht validiert, konvertiert oder dokumentiert werden (mit OpenAPI, für die automatische API-Benutzeroberfläche).
Obwohl jeder andere normal deklarierte Parameter (z. B. der Body, mit einem Pydantic-Modell) dennoch validiert, konvertiert, annotiert, usw. werden würde.
Es gibt jedoch bestimmte Fälle, in denen es nützlich ist, auf das Request
-Objekt zuzugreifen.
Das Request
-Objekt direkt verwenden¶
Angenommen, Sie möchten auf die IP-Adresse/den Host des Clients in Ihrer Pfadoperation-Funktion zugreifen.
Dazu müssen Sie direkt auf den Request zugreifen.
from fastapi import FastAPI, Request
app = FastAPI()
@app.get("/items/{item_id}")
def read_root(item_id: str, request: Request):
client_host = request.client.host
return {"client_host": client_host, "item_id": item_id}
Durch die Deklaration eines Pfadoperation-Funktionsparameters, dessen Typ der Request
ist, weiß FastAPI, dass es den Request
diesem Parameter übergeben soll.
Tipp
Beachten Sie, dass wir in diesem Fall einen Pfad-Parameter zusätzlich zum Request-Parameter deklarieren.
Der Pfad-Parameter wird also extrahiert, validiert, in den spezifizierten Typ konvertiert und mit OpenAPI annotiert.
Auf die gleiche Weise können Sie wie gewohnt jeden anderen Parameter deklarieren und zusätzlich auch den Request
erhalten.
Request
-Dokumentation¶
Weitere Details zum Request
-Objekt finden Sie in der offiziellen Starlette-Dokumentation.
Technische Details
Sie können auch from starlette.requests import Request
verwenden.
FastAPI stellt es direkt zur Verfügung, als Komfort für Sie, den Entwickler. Es kommt aber direkt von Starlette.