Skip to main content
← πŸ“„ HTML & the platformΒ·Module A3 Β· Lesson 14
TaskBuild the signup form matching the Pydantic Signup schema. Use a <form method='post' action='/api/signup'>. Inside one <fieldset><legend>Account</legend>: email + password. Second <fieldset><legend>Profile</legend>: age, country select (us/ua/de), bio textarea, accepted_tos checkbox. End with a submit button. Use labels, autocomplete, and validation attributes throughout.

Module capstone: signup form matching a Pydantic schema

200 XP14 min
Theory

Putting A3 together

Your FastAPI endpoint:

class Signup(BaseModel):
    email: EmailStr
    password: str = Field(min_length=8)
    age: int = Field(ge=13, le=120)
    country: Literal["us", "ua", "de"]
    bio: str = Field(default="", max_length=500)
    accepted_tos: bool

@app.post("/api/signup")
async def signup(data: Annotated[Signup, Form()]):
    return data

Your job: build the HTML form whose request body matches this schema 1:1. Field names match. Validation matches. autocomplete hints are set. Labels are linked. Group into fieldsets.

What "matches" means

  • For email: EmailStr β†’ <input type="email" name="email" required autocomplete="email">
  • For password: Field(min_length=8) β†’ <input type="password" name="password" required minlength="8" autocomplete="new-password">
  • For age: Field(ge=13, le=120) β†’ <input type="number" name="age" required min="13" max="120">
  • For country: Literal["us", "ua", "de"] β†’ <select name="country" required> with those three options
  • For bio: Field(max_length=500) β†’ <textarea name="bio" maxlength="500"> (NOT required since default="")
  • For accepted_tos: bool β†’ <input type="checkbox" name="accepted_tos" value="yes" required>

This is the API contract first mindset that the rest of A3 led up to.

πŸ”’

Sign up to start coding

Theory is open to everyone. The interactive editor, live preview, and check are unlocked with a 7-day free trial β€” card required, cancel anytime.

Sign up β€” free trial β†’

First 10 lessons in each track are free. No card needed for those.

← PreviousNext lesson β†’

Get one Python or web tip a day β€” by email

Short, hand-written, no spam. Unsubscribe in one click.