Question
I'm trying to build a simple API using Flask, in which I now want to read some
POSTed JSON. I do the POST with the Postman Chrome extension, and the JSON I
POST is simply {"text":"lalala"}
. I try to read the JSON using the following
method:
@app.route('/api/add_message/<uuid>', methods=['GET', 'POST'])
def add_message(uuid):
content = request.json
print content
return uuid
On the browser it correctly returns the UUID I put in the GET, but on the
console, it just prints out None
(where I expect it to print out the
{"text":"lalala"}
. Does anybody know how I can get the posted JSON from
within the Flask method?
Answer
First of all, the .json
attribute is a property that delegates to the
request.get_json()
method, which
documents why you see None
here.
You need to set the request content type to application/json
for the .json
property and .get_json()
method (with no arguments) to work as either will
produce None
otherwise. See the Flask Request
documentation:
The parsed JSON data if
mimetype
indicates JSON (application/json
, see.is_json
).
You can tell request.get_json()
to skip the content type requirement by
passing it the force=True
keyword argument.
Note that if an exception is raised at this point (possibly resulting in a 400 Bad Request response), your JSON data is invalid. It is in some way malformed; you may want to check it with a JSON validator.