Skip to content

Routing

Betrand edited this page Feb 26, 2026 · 1 revision

Routing

Basic Route

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

@app.route() defaults to GET.

Multiple Methods

@app.route("/contact", methods=["GET", "POST"])
def contact(request):
    if request.method == "POST":
        return "Submitted"
    return "Contact"

Method Shortcuts

@app.get("/hello/<name>")
def hello(request, name):
    return f"Hello {name}"

@app.get("/user/<int:user_id>")
def user(request, user_id):
    return f"User {user_id}"

@app.get("/file/<path:filepath>")
def file_route(request, filepath):
    return filepath

URL Building

@app.get("/users/<int:user_id>", name="user_detail")
def user_detail(request, user_id):
    return f"User {user_id}"

@app.get("/")
def index(request):
    url = app.url_for("user_detail", user_id=42)
    return f"Profile URL: {url}"

Route Groups

api = app.group("/api")

@api.get("/users")
def users(request):
    return {"ok": True}

Group middleware:

def api_mw(request, call_next):
    response = call_next(request)
    response.headers["X-API"] = "1"
    return response

api = app.group("/api", middleware=[api_mw])

Per-Route Options

@app.post("/webhook", csrf=False)
def webhook(request):
    return "ok"

Supported options:

  1. name="route_name" for app.url_for
  2. middleware=[...] route-specific middleware
  3. csrf=False disable CSRF on that route

Clone this wiki locally