NelsonLabs
Flask/Request & Response

Request & Response

Flask's request and response objects give you full access to everything in an HTTP request and full control over the response.

Working with requests
python
from flask import request, jsonify

@app.route("/api/courses", methods=["GET"])
def get_courses():
    # Query parameters: /api/courses?level=beginner&limit=10
    level = request.args.get("level")
    limit = request.args.get("limit", 20, type=int)

    courses = Course.query.filter_by(level=level).limit(limit).all()
    return jsonify([c.to_dict() for c in courses])

@app.route("/api/courses", methods=["POST"])
def create_course():
    # JSON body
    data = request.get_json()
    if not data or "title" not in data:
        return jsonify({"error": "title required"}), 400

    # Form data (from HTML forms)
    name  = request.form.get("name")
    email = request.form.get("email")

    # Request metadata
    request.method        # "POST"
    request.url           # full URL
    request.headers       # all headers
    request.remote_addr   # client IP
Building responses
python
from flask import jsonify, make_response, redirect, url_for

# JSON response (most common for APIs)
return jsonify({"courses": courses_list})

# With status code
return jsonify({"error": "Not found"}), 404
return jsonify({"id": new_id}), 201

# Custom response with headers
response = make_response(jsonify(data))
response.headers["X-Request-Id"] = request_id
response.status_code = 200
return response

# Redirect
return redirect(url_for("index"))
return redirect("https://nelsonlabs.dev", 301)

# Flash messages (shown in templates)
from flask import flash
flash("Course created successfully!", "success")
flash("Invalid email address", "error")