Skip to content

The Request Object

Every HTTP request has:

  • method (GET/POST/…)
  • URL path
  • query string
  • headers
  • optional body (form data / JSON)

In Flask, you access request data through flask.requestflask.request.

Importing request

from flask import request
from flask import request

requestrequest is a context-local proxy that points to the current request.

Common request attributes

  • request.methodrequest.method — HTTP method
  • request.argsrequest.args — query parameters (MultiDict)
  • request.formrequest.form — form fields from POST body (MultiDict)
  • request.filesrequest.files — uploaded files
  • request.jsonrequest.json / request.get_json()request.get_json() — JSON payload
  • request.headersrequest.headers — request headers
  • request.cookiesrequest.cookies — cookies

Quick demo route

from flask import Flask, request
 
app = Flask(__name__)
 
 
@app.route("/inspect", methods=["GET", "POST"])
def inspect():
    return {
        "method": request.method,
        "args": request.args,
        "form": request.form,
        "content_type": request.content_type,
    }
from flask import Flask, request
 
app = Flask(__name__)
 
 
@app.route("/inspect", methods=["GET", "POST"])
def inspect():
    return {
        "method": request.method,
        "args": request.args,
        "form": request.form,
        "content_type": request.content_type,
    }

Note: request.argsrequest.args and request.formrequest.form are MultiDict objects; Flask can serialize them in JSON responses, but you may want to cast them to dict for clarity.

Important security idea

Treat everything from requestrequest as untrusted:

  • validate type
  • validate allowed values
  • sanitize output

Later, Flask-WTF + validators automate a lot of this.

If this helped you, consider buying me a coffee ☕

Buy me a coffee

Was this page helpful?

Let us know how we did