When building web applications using Flask, it’s often necessary to access data sent by clients through HTTP requests. This can include form data, query parameters, JSON payloads, and files. In this tutorial, we’ll explore how to work with different types of request data in Flask.
Request Object Attributes
Flask provides a request
object that contains various attributes for accessing different types of request data. The most commonly used attributes are:
request.args
: A dictionary-like object containing query parameters from the URL.request.form
: A dictionary-like object containing form data sent in the request body.request.files
: A dictionary-like object containing files uploaded with the request.request.json
: A dictionary-like object containing parsed JSON data from the request body.request.data
: The raw request data as a string.
Accessing Query Parameters
To access query parameters, use the request.args
attribute. You can access values using indexing or the get()
method:
from flask import Flask, request
app = Flask(__name__)
@app.route('/search', methods=['GET'])
def search():
query = request.args.get('query')
# Use the query parameter value
return f'Searching for {query}'
Accessing Form Data
To access form data sent in the request body, use the request.form
attribute. You can access values using indexing or the get()
method:
from flask import Flask, request
app = Flask(__name__)
@app.route('/login', methods=['POST'])
def login():
username = request.form.get('username')
password = request.form.get('password')
# Use the form data values
return f'Logged in as {username}'
Accessing JSON Data
To access JSON data sent in the request body, use the request.json
attribute. Make sure the client sets the Content-Type
header to application/json
:
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/api/data', methods=['POST'])
def handle_data():
data = request.json
# Use the JSON data
return jsonify(data)
Accessing Files
To access files uploaded with the request, use the request.files
attribute:
from flask import Flask, request
app = Flask(__name__)
@app.route('/upload', methods=['POST'])
def upload_file():
file = request.files.get('file')
# Use the uploaded file
return 'File uploaded successfully'
Accessing Raw Request Data
To access the raw request data as a string, use the request.data
attribute or the request.get_data()
method. Be aware that request.data
may be empty if the request can be parsed as form data:
from flask import Flask, request
app = Flask(__name__)
@app.route('/raw-data', methods=['POST'])
def handle_raw_data():
raw_data = request.get_data()
# Use the raw request data
return 'Raw data received'
In conclusion, working with request data in Flask involves using various attributes of the request
object to access different types of data. By understanding how to use these attributes effectively, you can build robust and flexible web applications that handle a wide range of client requests.