Flask Routing & URL Building

πŸ›£οΈ Basic route

@app.route("/about")
def about():
    return "About page"

🎯 Dynamic segments + converters

@app.route("/user/<username>")           # string, default
@app.route("/post/<int:post_id>")           # int
@app.route("/price/<float:amount>")            # float
@app.route("/files/<path:filepath>")               # string but allows slashes
ConverterMatches
string (default)text, no slash
intpositive integer
floatpositive float
pathtext incl. slashes
uuidUUID format

Converters auto-validate + auto 404 on mismatch. Free validation.

πŸ“¬ HTTP methods

@app.route("/submit", methods=["GET", "POST"])
def submit():
    if request.method == "POST":
        return "submitted"
    return "form here"

Default = GET only.

πŸ”— url_for

url_for("about")                        # "/about"
url_for("show_user", username="amit")      # "/user/amit"
url_for("search", query="flask", page=2)      # "/search?query=flask&page=2" (extra kwargs β†’ query string)

Always use url_for over hardcoded paths β€” one place to update if a route URL changes.

πŸ”€ Redirect

from flask import redirect, url_for
return redirect(url_for("home"))

⚠️ Trailing slash

@app.route("/projects/")   # /projects β†’ redirects to /projects/
@app.route("/projects")    # /projects/ β†’ 404

🧾 Multiple routes, one function

@app.route("/")
@app.route("/home")
def home():
    return "Welcome"

πŸ”— Next

Flask Request & Response Objects Β· Flask Templates (Jinja2)