55
votes

I know I can set the status code of a response with Response(status=200). How can I return JSON data while setting the status code?

from flask import Flask, Response

@app.route('/login', methods=['POST'])
def login():
    response = Response(status=200)
    # need to set JSON like {'username': 'febin'}
    return response
2

2 Answers

128
votes

Use flask.jsonify(). This method takes any serializable data type. For example I have used a dictionary data in the following example.

from flask import jsonify

@app.route('/login', methods=['POST'])
def login():
    data = {'name': 'nabin khadka'}
    return jsonify(data)

To return a status code, return a tuple of the response and code:

return jsonify(data), 200

Note that 200 is the default status code, so it's not necessary to specify that code.


UPDATE

As of Flask 1.1, the return statement will automatically jsonify a dictionary in the first return value. You can return the data directly:

return data

You can also return it with a status code:

return data, 200
15
votes

You can append the data to the response like this:

from flask import Flask, json

@app.route('/login', methods=['POST'])
def login():
    data = {"some_key":"some_value"} # Your data in JSON-serializable type
    response = app.response_class(response=json.dumps(data),
                                  status=200,
                                  mimetype='application/json')
    return response

The response data content type is defined by mimetype parameter.