반응형
FastAPI 목차
응답 모델
모든 경로 작업에서 response_model
매개 변수를 사용하여 반응에 사용되는 모델을 선언할 수 있습니다.
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class User(BaseModel):
name: str
password: str
@app.post("/users", response_model=User) #응답 모델
def create_user(user: User): #요청 모델
return user
해당 코드를 작성하고 "http://localhost:8000/docs"에 들어가서 확인을 해보면
요청 모델에 User, 응답 모델에 User로써 각 Request body와 Response에 User 모델의 데이터가 넘어 온다라는 것을 확인할 수 있습니다.
위의 형태대로 작성을 하게 되어진다라면,
사용자의 비밀번호가 입력한대로, 데이터가 다시 노출되어질 수 있습니다.
그렇다면 사용자는 비밀번호를 입력받지만, 응답 할 때 비밀번호를 전달하지 않는 방법으로는 무엇이 있을까요?
응답 모델의 유저를 또 선언하여 작업할 수 있습니다.
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class CreateUser(BaseModel): #요청모델
name: str
password: str
class GetUser(BaseModel): #응답모델
name: str
@app.post("/users", response_model=GetUser)
def create_user(user: CreateUser):
return user
이렇게 작성한다라면, 응답 시에 데이터 내에는 비밀번호가 없는 것을 확인할 수 있습니다.
그러나 이 경우 중복코드가 있어서 불편함을 야기할 수 있습니다.
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class User(BaseModel):
name: str
class CreateUser(User): #User 상속
password: str
@app.post("/users", response_model=User)
def create_user(user: CreateUser):
return user
해결은 상속을 받음으로 중복코드를 제거하고 코드의 재사용성을 높일 수 있습니다,
CreateUser가 User를 상속 받음에 따라 CreateUser내에는 name과 password의 2가지 속성 값을 가지게 됩니다.
728x90
반응형
'Programming > Python' 카테고리의 다른 글
[Python] Pycharm 에러 해결법 정리 (0) | 2023.01.14 |
---|---|
[에러] 파이썬 가상환경 보안 에러 (0) | 2023.01.13 |
[FastAPI] 요청 본문 (0) | 2022.08.12 |
[FastAPI] 쿼리 매개변수 (0) | 2022.08.11 |
[FastAPI] 경로 매개변수 (0) | 2022.08.10 |