class Profile(BaseModel): #BaseModel을 상속받는 모델
name: str
email: str
age: int
class Product(BaseModel): #BaseModel을 상속받는 모델
name: str
price: int
discount_percent : int
discounted_price:float
class User(BaseModel):
name:str
email:str
app = FastAPI()
@app.post('/purchase')
def purchase(user:User,product:Product): #파라미터를 2개의 모델로 할 수 있음
product.discounted_price = product.price - \
(product.price * product.discount_percent) / 100
return {'user':user, 'product':product }
@app.post('/addproduct/{product_id}')
def addproduct(product:Product,product_id:int,category:str): #product는 모델, product_id는 path 파라미터, category는 쿼리파라미터
product.discounted_price= product.price- \
(product.price*product.discount_percent)/100
return {'product_id':product_id,'product':product,'category':category}
@app.get('/user/admin')
def main():
return {'This is admin page'}
@app.post('/adduser')
def adduser(profile:Profile):
return profile
Pydantic은 파싱을 도와주는 라이브러리로 모델을 사용할 때 보통 Pydantic의 BaseModel을 상속받아 사용한다.
위의 코드에서 Profile, Product, User 클래스는 BaseModel를 상속받아 각 클래스 만의 변수를 담고 있다.
post란 HTTP에서 새로운 리소스를 생성하여 서버로 데이터를 전송하는 행위를 하는 것을 말한다.
위의 코드에 purchase 메소드를 보면 User 와 Product 클래스를 매개변수로 받아 각 클래스안에 있는 변수를 사용하여 user가 product를 구매에 대한 새로운 리소스를 생성하도록 하였다.
Post 실행과 결과