응답 쿠키

응답 쿠키 (Response Cookies)

응답에 쿠키를 설정하는 두 가지 방법을 살펴볼게요. 하나는 Response 파라미터로 설정하는 법이고, 다른 하나는 Response를 직접 돌려주면서 설정하는 법이에요.

출처: 공식문서

Response 파라미터 사용하기

_path operation 함수_에 Response 타입의 파라미터를 선언할 수 있어요.

그리고 그 임시 response 객체에 쿠키를 설정하면 됩니다.

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"}

그리고 평소처럼 필요한 객체(dict, 데이터베이스 모델 등)를 돌려주면 됩니다.

response_model을 선언했다면, 여전히 돌려준 객체를 필터링하고 변환하는 데 사용돼요.

FastAPI는 그 임시 response에서 쿠키(헤더와 상태 코드도 함께)를 추출해서, 여러분이 돌려준 값을 담고 어떤 response_model로 필터링된 최종 response에 넣습니다.

의존성에서도 Response 파라미터를 선언하고 그 안에서 쿠키(와 헤더)를 설정할 수 있어요.

Response를 직접 돌려주기

코드에서 Response를 직접 돌려주면서 쿠키를 만들 수도 있어요.

그러려면 Response Directly 돌려주기에 설명된 대로 response를 만든 다음,

그 안에 쿠키를 설정하고 그걸 돌려주면 됩니다:

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

팁: Response 파라미터를 쓰지 않고 response를 직접 돌려주면, FastAPI는 그걸 그대로 돌려준다는 점을 기억하세요.

그래서 데이터 타입이 올바른지 직접 확인해야 해요. 예를 들어 JSONResponse를 돌려준다면 JSON과 호환되는지 말이죠.

그리고 response_model로 필터링됐어야 할 데이터를 보내지 않는지도 확인해야 해요.

더 알아보기 (More info)

기술적 세부사항: from starlette.responses import Responsefrom starlette.responses import JSONResponse를 쓸 수도 있어요. FastAPI는 개발자인 여러분의 편의를 위해 starlette.responses와 같은 것을 fastapi.responses로 제공하지만, 사용 가능한 response 대부분은 Starlette에서 직접 옵니다. 그리고 Response는 헤더와 쿠키를 설정할 때 자주 쓰이기 때문에, FastAPI는 그것도 fastapi.Response로 제공해요.

사용 가능한 모든 파라미터와 옵션을 보려면 Starlette 문서를 확인하세요.

더 알아보기 (Learn more)