← Back to Tutorials
16. HTML Forms
from fastapi import FastAPI, Request, Form
from fastapi.templating import Jinja2Templates
from fastapi.responses import HTMLResponse, RedirectResponse
app = FastAPI()
templates = Jinja2Templates(directory="templates")
@app.get("/login", response_class=HTMLResponse)
def login_form(request: Request):
return templates.TemplateResponse("login.html", {"request": request})
@app.post("/login")
def login(request: Request, username: str = Form(...), password: str = Form(...)):
# Validate credentials
if username == "admin" and password == "secret":
return RedirectResponse(url="/dashboard", status_code=302)
return templates.TemplateResponse(
"login.html",
{"request": request, "error": "Invalid credentials"}
)
HTML Form Template
<form method="post" action="/login">
<input type="text" name="username" placeholder="Username">
<input type="password" name="password" placeholder="Password">
<button type="submit">Login</button>
</form>
{% if error %}
<p style="color:red">{{ error }}</p>
{% endif %}
✏️ Exercise: Create a registration form with username, email, password, and confirm_password fields. POST to FastAPI, validate all fields, and return success/error.
← Previous Back to Index Next: Form Data →