0Pricing
Python Academy · บทเรียน

พารามิเตอร์เส้นทาง พารามิเตอร์คำค้น และบอดีคำขอ

กำหนดพารามิเตอร์ที่มีชนิดข้อมูลและสคีมาบอดีคำขอด้วย Pydantic

พารามิเตอร์เส้นทาง พารามิเตอร์คำค้น และบอดีคำขอ เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน 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

นามแฝงและการเลิกใช้งาน

ใช้ alias= ใน Query() หรือ Field() เพื่อรับชื่ออื่นในคำขอ และใช้ 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 จะตรวจสอบทุกอย่างก่อนเรียกใช้ตัวจัดการของคุณ

คำถามที่พบบ่อย

บทเรียน “พารามิเตอร์เส้นทาง พารามิเตอร์คำค้น และบอดีคำขอ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “พารามิเตอร์เส้นทาง พารามิเตอร์คำค้น และบอดีคำขอ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “พารามิเตอร์เส้นทาง พารามิเตอร์คำค้น และบอดีคำขอ”

กำหนดพารามิเตอร์ที่มีชนิดข้อมูลและสคีมาบอดีคำขอด้วย Pydantic คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “พารามิเตอร์เส้นทาง พารามิเตอร์คำค้น และบอดีคำขอ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม

ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การตั้งค่าโปรเจกต์ FastAPI และเอนด์พอยต์แรก
  2. พารามิเตอร์เส้นทาง พารามิเตอร์คำค้น และบอดีคำขอ
  3. การแทรกการพึ่งพาและการยืนยันตัวตน
  4. เอนด์พอยต์อะซิงก์และการเชื่อมต่อฐานข้อมูล
← กลับไปที่ Python Academy