경로 매개변수, 쿼리 매개변수 및 요청 본문
Pydantic으로 형식이 지정된 매개변수와 요청 본문 스키마를 정의합니다.
경로 매개변수, 쿼리 매개변수 및 요청 본문은(는) CoddyKit의 무료 Python Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Python Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
경로 매개변수 검증
Path()를 사용해 경로 매개변수에 검증기를 추가합니다. ge, le, gt, lt 제약 조건을 설정할 수 있습니다.
from fastapi import FastAPI, Path
app = FastAPI()
@app.get("/items/{item_id}")
def get_item(item_id: int = Path(ge=1, le=1000)):
return {"item_id": item_id}
# GET /items/0 → 422 (must be >= 1)쿼리 매개변수 검증
Query()를 사용해 쿼리 매개변수에 검증, 기본값, 별칭 및 설명을 추가합니다.
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/search")
def search(
q: str = Query(min_length=2, max_length=50),
page: int = Query(default=1, ge=1),
):
return {"q": q, "page": page}선택적 쿼리 매개변수
| None = None(Python 3.10 이상) 또는 Optional[str] = None을 사용하면 쿼리 매개변수를 선택 사항으로 만들 수 있습니다.
from fastapi import FastAPI
app = FastAPI()
@app.get("/users")
def list_users(
dept: str | None = None,
active: bool = True
):
return {"dept": dept, "active": active}
# GET /users → dept=None, active=True
# GET /users?dept=HR&active=false하나의 쿼리 매개변수에 여러 값 사용
list[str]과 Query()를 사용하면 하나의 쿼리 매개변수에 여러 값의 목록을 받을 수 있습니다.
from fastapi import FastAPI, Query
from typing import Annotated
app = FastAPI()
@app.get("/filter")
def filter_items(tags: Annotated[list[str], Query()] = []):
return {"tags": tags}
# GET /filter?tags=python&tags=web중첩된 요청 본문
Pydantic 모델은 중첩할 수 있습니다. FastAPI가 중첩된 JSON을 자동으로 처리합니다.
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Address(BaseModel):
street: str
city: str
class User(BaseModel):
name: str
address: Address
@app.post("/users")
def create_user(user: User):
return user.model_dump()Pydantic의 필드 제약 조건
모델 내부에서 Field()를 사용하면 개별 필드에 제약 조건, 기본값 및 설명을 추가할 수 있습니다.
from pydantic import BaseModel, Field
class Product(BaseModel):
name: str = Field(min_length=1, max_length=100)
price: float = Field(gt=0)
quantity: int = Field(ge=0, default=0, description="Items in stock")요청 본문 + 경로 + 쿼리 함께 사용
하나의 엔드포인트에서 세 가지 매개변수 유형을 모두 조합할 수 있습니다. FastAPI는 위치에 따라 구분합니다. 경로는 URL에, 단순 형식은 쿼리에, 모델은 본문에 해당합니다.
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class ItemUpdate(BaseModel):
name: str
price: float
@app.put("/shops/{shop_id}/items/{item_id}")
def update_item(
shop_id: int,
item_id: int,
item: ItemUpdate,
notify: bool = False,
):
return {"shop": shop_id, "item": item_id,
"data": item.model_dump(), "notify": notify}파일 업로드
UploadFile과 File()을 사용해 파일 업로드를 받습니다. await file.read()로 콘텐츠에 접근합니다.
from fastapi import FastAPI, UploadFile, File
app = FastAPI()
@app.post("/upload")
async def upload(file: UploadFile = File(...)):
content = await file.read()
return {"filename": file.filename, "size": len(content)}폼 데이터
Form()을 사용해 HTML 폼 데이터(application/x-www-form-urlencoded 또는 multipart/form-data)를 받습니다.
# pip install python-multipart
from fastapi import FastAPI, Form
app = FastAPI()
@app.post("/login")
def login(username: str = Form(...), password: str = Form(...)):
return {"username": username}요청 검증 요약
FastAPI는 모든 매개변수 유형을 자동으로 검증합니다. 잘못된 입력이 들어오면 핸들러가 호출되기 전에 자세한 오류와 함께 HTTP 422를 반환합니다.
# Auto-validated:
# - Path params: type coercion, Path() constraints
# - Query params: Query() constraints, type coercion
# - Request body: Pydantic model validation
# - All errors → HTTP 422 Unprocessable Entity
# - No manual validation needed별칭 및 사용 중단
Query() 또는 Field()에서 alias=를 사용하면 요청에서 다른 이름을 받을 수 있고, deprecated=True를 사용하면 이전 매개변수를 사용 중단된 것으로 표시할 수 있습니다.
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/items")
def get_items(
q: str | None = Query(default=None, alias="search-query"),
old: str | None = Query(default=None, deprecated=True),
):
return {"q": q, "old": old}
# GET /items?search-query=python빠른 확인
FastAPI는 경로 매개변수, 쿼리 매개변수 및 요청 본문을 어떻게 구분합니까?
복습
매개변수 제약 조건에는 Path()/Query()를 사용합니다. 복잡한 본문에는 Pydantic 모델을 중첩합니다. 경로, 쿼리 및 본문 매개변수는 자유롭게 조합할 수 있습니다. UploadFile은 파일을 처리하고 Form()은 HTML 폼을 처리합니다. FastAPI는 핸들러가 실행되기 전에 모든 항목을 검증합니다.
자주 묻는 질문
“경로 매개변수, 쿼리 매개변수 및 요청 본문” 강의는 무료인가요?
네 — “경로 매개변수, 쿼리 매개변수 및 요청 본문” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Python Academy 강의 전체를 잠금 해제할 수 있습니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“경로 매개변수, 쿼리 매개변수 및 요청 본문”에서 뭘 배우나요?
Pydantic으로 형식이 지정된 매개변수와 요청 본문 스키마를 정의합니다. 브라우저에서 직접 실행하는 실습 코드로 Python Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Python Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Python Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“경로 매개변수, 쿼리 매개변수 및 요청 본문” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Python Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Python Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- FastAPI 프로젝트 설정과 첫 엔드포인트
- 경로 매개변수, 쿼리 매개변수 및 요청 본문
- 의존성 주입과 인증
- 비동기 엔드포인트와 데이터베이스 통합