Web/FastAPI

FastAPI Data Validation

알로그 2023. 1. 15. 19:33
반응형

FastAPI Data Validation

유데미 FastAPI 강의 스터디를 진행하면서 내용을 정리해본다.

 

FastAPI - The Complete Course 2023 (Beginner + Advanced)

Dive in and learn FastAPI from scratch! Learn FastAPI, RESTful APIs using Python, SQLAlchemy, OAuth, JWT and way more!

www.udemy.com

 

Data Validation

Field를 이용해 min_length, max_length, gt, lt 등을 확용하여 validation 할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel, Field
from uuid import UUID
 
app = FastAPI()
 
class Book(BaseModel):
    id: UUID
    title: str = Field(min_length=1)
    author: str = Field(min_length=1, max_length=100)
    description: Optional[str= Field(title="Description of the book"
                             max_length=100,
                             min_length=1)
    rating: int = Field(gt=-1, lt=101)
 
 
BOOKS = []
 
@app.get("/")
async def read_all_books():
    return BOOKS
 
@app.post("/")
async def create_book(book: Book):
    BOOKS.append(book)
    return book
cs

 

 

 

 


BaseModel Configurations

Swagger 문서 내에 기본으로 스키마를 제공해줄 수 있다.

아래와 같이 BaseModel을 상속으로 받는 Book 클래스 내에 Config 클래스를 작성하면..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Book(BaseModel):
    id: UUID
    title: str = Field(min_length=1)
    author: str = Field(min_length=1, max_length=100)
    description: Optional[str= Field(title="Description of the book"
                             max_length=100,
                             min_length=1)
    rating: int = Field(gt=-1, lt=101)
 
    class Config:
        schema_extra = {
            "example": {
                "id""fa9e694b-efb6-41b0-bdb6-606975d23290",
                "title""Computer Science",
                "author""hunk",
                "description""A very nice description of a book",
                "rating"70
            }
        }
cs

 

Request Body에 아래와 같이 값이 기본으로 세팅된다.

반응형

'Web > FastAPI' 카테고리의 다른 글

FastAPI BaseModel  (0) 2022.12.31