Handling Query Parameters
Query parameters are the ?key=value part of a URL.
Example:
/search?q=flask&page=2
flowchart TD
A["/search?q=ada&page=2"] --> B["request.args"]
B --> C["get('q') -> 'ada'"]
B --> D["get('page') -> '2' (a STRING)"]
B --> E["get('page', type=int) -> 2"]
B --> F["get('missing') -> None, no error"]
G["/search?page=notanumber"] --> H["get('page', type=int)"]
H --> I["None -- the conversion failed silently"]
I --> J["supply a default: get('page', 1, type=int)"]
Accessing query parameters
Section titled “Accessing query parameters”Flask stores query parameters in request.args.
from flask import Flask, request
app = Flask(__name__)
@app.route("/search")
def search():
q = request.args.get("q", "")
page = request.args.get("page", default=1, type=int)
return {"q": q, "page": page}Why use type=?
Section titled “Why use type=?”- Converts the string to the type you expect
- If conversion fails, Flask returns the default (instead of crashing)
Handling multiple values
Section titled “Handling multiple values”Some URLs have repeated params:
/filter?tag=python&tag=flask
tags = request.args.getlist("tag")Validation basics
Section titled “Validation basics”Even with type=int, you still should validate:
- ranges (page >= 1)
- allowed values (sort in top)
If invalid, return a clear error or a 400 status code.
🧪 Try It Yourself
Section titled “🧪 Try It Yourself”Exercise 1 – Create a Flask App
Section titled “Exercise 1 – Create a Flask App”Exercise 2 – Dynamic Route
Section titled “Exercise 2 – Dynamic Route”Exercise 3 – Return JSON
Section titled “Exercise 3 – Return JSON”pch.coffeeTagline
pch.coffeeCtapch.feedbackHeading
pch.feedbackSubheading