← Back to Tutorials

17. Form Data

pip install python-multipart
from fastapi import FastAPI, Form

app = FastAPI()

@app.post("/submit/")
def submit_form(
    username: str = Form(...),
    password: str = Form(...),
    remember_me: bool = Form(False)
):
    return {
        "username": username,
        "remember_me": remember_me
    }

# Multiple form fields
@app.post("/register/")
def register(
    username: str = Form(..., min_length=3),
    email: str = Form(...),
    age: int = Form(..., ge=18),
    bio: str = Form(None, max_length=500)
):
    return {"username": username, "email": email}

# Form data with file
from fastapi import UploadFile, File

@app.post("/profile/")
def create_profile(
    name: str = Form(...),
    avatar: UploadFile = File(...)
):
    return {"name": name, "avatar": avatar.filename}
⚠️ Note: Form data uses application/x-www-form-urlencoded. Do NOT mix Form and JSON Body parameters in the same endpoint — use separate endpoints or Body parameters.
✏️ Exercise: Create a form POST endpoint that accepts name, email, and age. Return a summary of the submitted data.