I have a flask app with the following view:
@menus.route('/', methods=["PUT", "POST"]) def new(): return jsonify(request.json)
However, this only works if the request's content type is set to application/json
, otherwise the dict request.json
is None.
I know that request.data
has the request body as a string, but I don't want to be parsing it to a dict everytime a client forgets to set the request's content-type.
Is there a way to assume that every incoming request's content-type is application/json
? All I want is to always have access to a valid request.json
dict, even if the client forgets to set the application content-type to json.
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.
To set content type with Python Flask, we can create a Response instance with the mimetype argument. to create the ajax view that returns a response by creating a Response instance with the mimetyp set to 'text/xml' to return an XML response with the xml string as the body.
To access the incoming data in Flask, you have to use the request object. The request object holds all incoming data from the request, which includes the mimetype, referrer, IP address, raw data, HTTP method, and headers, among other things.
Use request.get_json()
and set force
to True
:
@menus.route('/', methods=["PUT", "POST"]) def new(): return jsonify(request.get_json(force=True))
From the documentation:
By default this function will only load the json data if the mimetype is
application/json
but this can be overridden by the force parameter.Parameters:
- force – if set to True the mimetype is ignored.
For older Flask versions, < 0.10, if you want to be forgiving and allow for JSON, always, you can do the decode yourself, explicitly:
from flask import json @menus.route('/', methods=["PUT", "POST"]) def new(): return jsonify(json.loads(request.data))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With