Response – Statuscode ändern¶
Sie haben wahrscheinlich schon vorher gelesen, dass Sie einen Standard-Response-Statuscode festlegen können.
In manchen Fällen müssen Sie jedoch einen anderen als den Standard-Statuscode zurückgeben.
Anwendungsfall¶
Stellen Sie sich zum Beispiel vor, Sie möchten standardmäßig den HTTP-Statuscode „OK“ 200
zurückgeben.
Wenn die Daten jedoch nicht vorhanden waren, möchten Sie diese erstellen und den HTTP-Statuscode „CREATED“ 201
zurückgeben.
Sie möchten aber dennoch in der Lage sein, die von Ihnen zurückgegebenen Daten mit einem response_model
zu filtern und zu konvertieren.
In diesen Fällen können Sie einen Response
-Parameter verwenden.
Einen Response
-Parameter verwenden¶
Sie können einen Parameter vom Typ Response
in Ihrer Pfadoperation-Funktion deklarieren (wie Sie es auch für Cookies und Header tun können).
Anschließend können Sie den status_code
in diesem vorübergehenden Response-Objekt festlegen.
from fastapi import FastAPI, Response, status
app = FastAPI()
tasks = {"foo": "Listen to the Bar Fighters"}
@app.put("/get-or-create-task/{task_id}", status_code=200)
def get_or_create_task(task_id: str, response: Response):
if task_id not in tasks:
tasks[task_id] = "This didn't exist before"
response.status_code = status.HTTP_201_CREATED
return tasks[task_id]
Und dann können Sie wie gewohnt jedes benötigte Objekt zurückgeben (ein dict
, ein Datenbankmodell usw.).
Und wenn Sie ein response_model
deklariert haben, wird es weiterhin zum Filtern und Konvertieren des von Ihnen zurückgegebenen Objekts verwendet.
FastAPI verwendet diese vorübergehende Response, um den Statuscode (auch Cookies und Header) zu extrahieren und fügt diese in die endgültige Response ein, die den von Ihnen zurückgegebenen Wert enthält, gefiltert nach einem beliebigen response_model
.
Sie können den Parameter Response
auch in Abhängigkeiten deklarieren und den Statuscode darin festlegen. Bedenken Sie jedoch, dass der gewinnt, welcher zuletzt gesetzt wird.