에듀테크 프로젝트 대시보드
응답 모델과 상태 코드
반환 데이터의 스키마를 선언해 출력에서 민감 필드를 제거하고 문서를 정확하게 만듭니다.
class UserIn(BaseModel):
username: str
password: str # 입력엔 있고
class UserOut(BaseModel):
username: str # 출력엔 없음
@app.post("/users", response_model=UserOut)
def create(user: UserIn):
save(user)
return user # password 가 있어도 응답에선 잘려나감@app.get(
"/items/{id}",
response_model=Item,
response_model_exclude_none=True, # None 필드 제외
response_model_exclude={"internal_note"},
)
def read(id: int): ...from fastapi import status
@app.post("/items", status_code=status.HTTP_201_CREATED)
def create(): ...
@app.delete("/items/{id}", status_code=204)
def delete(id: int):
...
return None # 204 는 본문 없음from fastapi.responses import JSONResponse, PlainTextResponse, RedirectResponse, StreamingResponse
@app.get("/csv")
def csv():
return StreamingResponse(row_iter(), media_type="text/csv")
@app.get("/old")
def old():
return RedirectResponse("/new", status_code=307)Response 를 직접 반환하면 response_model 검증·필터링을 건너뜀@app.get(
"/items/{id}",
response_model=Item,
responses={404: {"description": "아이템 없음"}},
)
def read(id: int): ...