728x90
Pydantic, BaseModel, Data Validation, CRUD, UUID
1. Pydantic
- FastAPI 내에서 Data Validation(데이터 유효성)을 검사하고 관리하는 라이브러리
- 클래스 모델에 속해있는 값들에 적합한 자료형을 코드에 선언하고 자료형을 검증하는 것을 도와준다.
- 선언한 자료형과 일치하는 않는 자료형을 가진 값이 대입되는 경우, Data Validation(데이터 유효성) 오류가 발생한다.
- Python에서 기본적으로 제공하는 json 모듈의 loads를 이용해 JSON 모델로 반환하는데 이것을 서포터 해준다.
즉, 선언한 자료형의 값들에 벗어나는 경우에 대해 검사를 한다.
우선, 정의를 하기 위해서는 BaseModel을 상속을 받아서 구현해야 한다.
from pydantic import BaseModel
class study(BaseModel):
id: int
name: str
time: datetime
tag: list = []
price: float
※ BaseModel의 역할은 Python의 dict 형태의 데이터를 Pydantic 모델로 변환하기 위해서 사용된다.
※ 클래스 id, name에 선언한 타입은 다른 자료형이 들어왔을 때 강제로 변환해 준다.
ex) str, byte, float -> int형으로 변환
추가적으로 Field, Optional 등을 사용하면 자료형에 옵션을 추가할 수 있다.
from pydantic import BaseModel, Field
from typing import Optional
class study(BaseModel):
price: Optional[str] = None
rating: int = Field(gt=-1, lt=101) #gt:최소/lt:최대 1~100까지
name: Optional[str] = Field(min_length=1, max_length=100)
description: Optional[str] = Field(min_length=1, max_length=100)
time: Optional[datetime] = None
※ gt/lt: 최소/최대크기(해당 숫자 포함 x), min/max_length: 최소/최대길이, Optional: 선택자
BaseModel에는 Example Value을 설정할 수 있다.
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel, Field
app = FastAPI()
class Study(BaseModel):
title: str = Field(min_length=1)
author: str = Field(min_length=1, max_length=100)
description: Optional[str] = Field(max_length=100, min_length=1)
rating: int = Field(gt=-1, lt=101)
class Config:
schema_extra = {
"example": {
"title": "Computer Science Pro",
"author": "Codingwithroby",
"description": "A very nice description of a book",
"rating": 75
}
}
※ 자료형에 어떤 데이터들이 들어가야 하는지 Example Value값을 보여줄 수 있다.
2. CRUD
- GET - 데이터 요청
from fastapi import FastAPI
from pydantic import BaseModel, Field
from typing import Optional
app = FastAPI()
list_ = {"title": "Computer Science Pro",
"author": "Codingwithroby",
"description": "A very nice description of a book",
"rating": 75}
@app.get("/")
async def read():
return list_
※ list_의 dict값을 요청해서 return 시킨다.
- POST - 데이터 생성
from fastapi import FastAPI
from pydantic import BaseModel, Field
from typing import Optional
app = FastAPI()
class Study(BaseModel):
title: str = Field(min_length=1)
author: str = Field(min_length=1, max_length=100)
description: Optional[str] = Field(max_length=100, min_length=1)
rating: int = Field(gt=-1, lt=101)
list_ = []
@app.post("/")
async def create(new_list:Study):
list_.append(new_list)
return list_
@app.get("/")
async def read():
return list_
※ Study에 정의한 자료형에 맞게 list_에 dict형태로 추가를 한다.
- PUT - 데이터 업데이트
from fastapi import FastAPI
from pydantic import BaseModel, Field
from typing import Optional
app = FastAPI()
class Study(BaseModel):
title: str = Field(min_length=1)
author: str = Field(min_length=1, max_length=100)
description: Optional[str] = Field(max_length=100, min_length=1)
rating: int = Field(gt=-1, lt=101)
list_ = [{"title": "Computer Science Pro",
"author": "Codingwithroby",
"description": "A very nice description of a book",
"rating": 75}]
@app.put("/")
async def update(new_list:Study):
list_[0] = new_list
return list_
@app.get("/")
async def read():
return list_
※ list_의 dict값이 new_list로 업데이트된다.
- DELETE - 데이터 삭제
from fastapi import FastAPI
from pydantic import BaseModel, Field
from typing import Optional
app = FastAPI()
class Study(BaseModel):
title: str = Field(min_length=1)
author: str = Field(min_length=1, max_length=100)
description: Optional[str] = Field(max_length=100, min_length=1)
rating: int = Field(gt=-1, lt=101)
list_ = [{"title": "Computer Science Pro",
"author": "Codingwithroby",
"description": "A very nice description of a book",
"rating": 75}]
@app.delete("/")
async def delete():
del list_[0]
return list_
@app.get("/")
async def read():
return list_
※ list_안의 dict를 지운다
3. UUID
- 고유한 식별자를 갖기 위함으로 키를 간단하게 생성해서 사용
- 개인정보보호 목적으로 사용자의 id의 노출을 최소화하고자 할 때 사용
- 버전에 따라 생성되는 규칙이 다르다고 한다.
- 버전 1 (시간 + MAC 주소)
- 버전 2 (시간 + DCE 보안)
- 버전 3 (시간 + MD5 해시)
- 버전 4 (시간 + 랜덤)
- 버전 5 (시간 + SHA-1 해시)
- uuid 라이브러리에서도 각 버전에 맞추어 키를 생성
UUID의 값은 https://www.uuidgenerator.net/
728x90
SMALL
'Develop > FastAPI' 카테고리의 다른 글
FastAPI ORM SQLAlchemy(Sqllite) - 31 (0) | 2022.12.29 |
---|---|
FastAPI SQL DataBase Introduce - 30 (0) | 2022.12.29 |
FastAPI Project Assignment - 29 (0) | 2022.12.26 |
FastAPI Headers - 28 (0) | 2022.12.24 |
FastAPI Form Fields - 27 (0) | 2022.12.24 |