Get the data received in a Flask request

StackOverflow

I want to be able to get the data sent to my Flask app. I"ve tried accessing request.data but it is an empty string. How do you access request data?

from flask import request

@app.route("/", methods=["GET", "POST"])
def parse_request():
    data = request.data  # data is empty
    # need posted data here

The answer to this question led me to ask Get raw POST body in Python Flask regardless of Content-Type header next, which is about getting the raw data rather than the parsed data.

Answer rating: 1734

The docs describe the attributes available on the request. In most common cases request.data will be empty because it"s used as a fallback:

request.data Contains the incoming request data as string in case it came with a mimetype Flask does not handle.

  • request.args: the key/value pairs in the URL query string
  • request.form: the key/value pairs in the body, from a HTML post form, or JavaScript request that isn"t JSON encoded
  • request.files: the files in the body, which Flask keeps separate from form. HTML forms must use enctype=multipart/form-data or files will not be uploaded.
  • request.values: combined args and form, preferring args if keys overlap
  • request.json: parsed JSON data. The request must have the application/json content type, or use request.get_json(force=True) to ignore the content type.

All of these are MultiDict instances (except for json). You can access values using:

  • request.form["name"]: use indexing if you know the key exists
  • request.form.get("name"): use get if the key might not exist
  • request.form.getlist("name"): use getlist if the key is sent multiple times and you want a list of values. get only returns the first value.

Answer rating: 242

To get the raw data, use request.data. This only works if it couldn"t be parsed as form data, otherwise it will be empty and request.form will have the parsed data.

from flask import request
request.data

Answer rating: 226

For URL query parameters, use request.args.

search = request.args.get("search")
page = request.args.get("page")

For posted form input, use request.form.

email = request.form.get("email")
password = request.form.get("password")

For JSON posted with content type application/json, use request.get_json().

data = request.get_json()

Answer rating: 134

Here"s an example of parsing posted JSON data and echoing it back.

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route("/foo", methods=["POST"]) 
def foo():
    data = request.json
    return jsonify(data)

To post JSON with curl:

curl -i -H "Content-Type: application/json" -X POST -d "{"userId":"1", "username": "fizz bizz"}" http://localhost:5000/foo

Or to use Postman:

using postman to post JSON





Get Solution for free from DataCamp guru