응답 쿠키
응답 쿠키 (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 Response나from starlette.responses import JSONResponse를 쓸 수도 있어요. FastAPI는 개발자인 여러분의 편의를 위해starlette.responses와 같은 것을fastapi.responses로 제공하지만, 사용 가능한 response 대부분은 Starlette에서 직접 옵니다. 그리고Response는 헤더와 쿠키를 설정할 때 자주 쓰이기 때문에, FastAPI는 그것도fastapi.Response로 제공해요.사용 가능한 모든 파라미터와 옵션을 보려면 Starlette 문서를 확인하세요.