<form action method>: the request your backend receives
Three attributes shape the HTTP request
<form action="/api/signup" method="post" enctype="application/x-www-form-urlencoded"> <input name="email" type="email" /> <input name="password" type="password" /> <button type="submit">Sign up</button> </form>
- `action` β where the form POSTs. Relative or absolute URL. Defaults to the current page.
- `method` β
get(default, params in URL) orpost(body). For mutations, use post. For searches, use get. - `enctype` β only matters for POST:
- application/x-www-form-urlencoded (default) β email=anna%40example.com&password=β¦
- multipart/form-data β required when one or more inputs are <input type="file">
- text/plain β never use this, it's only for debugging
What FastAPI sees
For <form method="post"><input name="email" value="anna@example.com"></form>, your FastAPI endpoint:
@app.post("/api/signup")
async def signup(email: str = Form()):
return {"got": email}The name="email" is the Pydantic field name. If you change name="user_email" on the input, FastAPI's Form(alias="user_email") is what catches it.
GET vs POST visibility
get puts data in the URL (/search?q=python) β bookmarkable, sharable, in browser history. post puts data in the body β invisible in URL, not in history, not bookmarked. Passwords ALWAYS POST.
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.