반응형
안녕하세요.
이번 시간에서는 fastapi에서 Form으로 input을 받는 경우,
pydantic을 통한 데이터 무결성을 검증하는 방법을 살펴보도록 하겠습니다.
request body로 json input을 받는 경우에는 다음과 같이 쉽게 무결성 구현이 가능합니다.
from fastapi import FastAPI
from pydantic import BaseModel, Field, EmailStr
app = FastAPI()
class User(BaseModel):
username: str = Field(..., min_length=3, max_length=50)
password: str = Field(..., min_length=8)
email: EmailStr
is_active: bool = True
@app.post("/register")
async def register(user: User):
return {"message": "User created successfully", "user": user.dict()}
위와 같이 register(user: User) 부분에서 input의 타입을 pydantic 모델로 지정해주면
자동으로 무결성 검증이 가능합니다.
하지만, Form으로 input을 받는 경우에는 input으로 위와 같은 타입 지정이 어려워
다른 방법으로 우회하여 검사를 해야 합니다.
이 때, 가장 쉬운 방법 중 하나는 pydantic 객체를 내부에서 재선언을 하면서
무결성을 검사하는 방법입니다. 코드 예시는 다음과 같습니다.
from fastapi import FastAPI, Form, HTTPException
from pydantic import BaseModel, Field, EmailStr, ValidationError
app = FastAPI()
class User(BaseModel):
username: str = Field(..., min_length=3, max_length=50)
password: str = Field(..., min_length=8)
email: EmailStr
is_active: bool = True
@app.post("/register")
async def register(
username: str = Form(...),
password: str = Form(...),
email: str = Form(...),
is_active: bool = Form(True)
):
# 내부에서 pydantic 객체 재선언
try:
user = User(username=username, password=password, email=email, is_active=is_active)
# 무결성 검증 실패 시 422 에러 반환
except ValidationError as e:
raise HTTPException(status_code=422, detail=e.errors())
return {"message": "User created successfully", "user": user.dict()}
위와 같은 코드로 Form 형태의 데이터에 대해서도 무결성 검증을 쉽게 할 수 있습니다.
이 글이 FastAPI로 서버를 구현하는 과정에 도움이 되셨기를 기원합니다.
잘 봐주셔서 감사합니다.
'Python > Backend' 카테고리의 다른 글
FastAPI 미들웨어(middleware) 선언 코드 예제 (2) | 2025.03.12 |
---|---|
FastAPI 동기/비동기 설정 시 주의 사항 (0) | 2025.02.17 |
FastAPI에서 docs 및 redoc에 상세 response model 부여 방법 - 오류 명세 작성 예시 (2) | 2025.01.20 |