Zum Inhalt

Response-Cookies

Einen Response-Parameter verwenden

Sie können einen Parameter vom Typ Response in Ihrer Pfadoperation-Funktion deklarieren.

Und dann können Sie Cookies in diesem vorübergehenden Response-Objekt setzen.

from fastapi import FastAPI, Response

app = FastAPI()


@app.post("/cookie-and-object/")
def create_cookie(response: Response):
    response.set_cookie(key="fakesession", value="fake-cookie-session-value")
    return {"message": "Come to the dark side, we have cookies"}

Anschließend können Sie wie gewohnt jedes gewünschte 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 die Cookies (auch Header und Statuscode) 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 Response-Parameter auch in Abhängigkeiten deklarieren und darin Cookies (und Header) setzen.

Eine Response direkt zurückgeben

Sie können Cookies auch erstellen, wenn Sie eine Response direkt in Ihrem Code zurückgeben.

Dazu können Sie eine Response erstellen, wie unter Eine Response direkt zurückgeben beschrieben.

Setzen Sie dann Cookies darin und geben Sie sie dann zurück:

from fastapi import FastAPI
from fastapi.responses import JSONResponse

app = FastAPI()


@app.post("/cookie/")
def create_cookie():
    content = {"message": "Come to the dark side, we have cookies"}
    response = JSONResponse(content=content)
    response.set_cookie(key="fakesession", value="fake-cookie-session-value")
    return response

Tipp

Beachten Sie, dass, wenn Sie eine Response direkt zurückgeben, anstatt den Response-Parameter zu verwenden, FastAPI diese direkt zurückgibt.

Sie müssen also sicherstellen, dass Ihre Daten vom richtigen Typ sind. Z. B. sollten diese mit JSON kompatibel sein, wenn Sie eine JSONResponse zurückgeben.

Und auch, dass Sie keine Daten senden, die durch ein response_model hätten gefiltert werden sollen.

Mehr Informationen

Technische Details

Sie können auch from starlette.responses import Response oder from starlette.responses import JSONResponse verwenden.

FastAPI bietet dieselben starlette.responses auch via fastapi.responses an, als Annehmlichkeit für Sie, den Entwickler. Die meisten verfügbaren Responses kommen aber direkt von Starlette.

Und da die Response häufig zum Setzen von Headern und Cookies verwendet wird, stellt FastAPI diese auch unter fastapi.Response bereit.

Um alle verfügbaren Parameter und Optionen anzuzeigen, sehen Sie sich deren Dokumentation in Starlette an.