I have a simple app made in Flask. It uses only POST method. It takes 2 numbers (in json) and adds them up.
{"a": 1, "b": 1}
The application responds with the sum of these numbers (also in json).
{"sum": 2}
The code looks like this:
@appFlask.route('sum', methods=['POST'])
def result():
data = request.get_json()
return jsonify({'sum': data['a'] data['b']})
I would like to do error handling. The problem is that there are a lot of these errors, e.g. for the following calls, they should return "400 Bad Request" or if the file isn't in json.
{"a":1, "b":1, "c":1}
{"a", "a":1, "b":1}
{}
{"a":1}
{"a":0, "b":1}
How can i make it in the simplest way? Is there a way to do this in one function?
CodePudding user response:
You can use catch the error and then you can return "400 Bad Request" and return an example of data and it's validations to the user.
@appFlask.route('sum', methods=['POST'])
def result():
try:
data = request.get_json()
# check if a or b is not 0
if data['a'] == 0 or data['b'] == 0:
raise Exception("Error occurred")
return jsonify({'sum': data['a'] data['b']})
except Exception as e:
return "400 Bad Request"
All the other calls mentioned in example will generate error which will be cached.
You don't need to worry for {"a":1, "b":1, "c":1}
as it will not affect the code but if you want to consider it bad request you need to do a check for it.
You surely need to do checks according to your needs as there is no built in function for that.
CodePudding user response:
You can pass along the HTTP status code with your return statement.
@appFlask.route('/sum', methods=['POST'])
def result():
try:
data = request.get_json()
if len(data.keys()) != 2 and all(data.values()): #
return "Invalid Data", 400
return jsonify({'sum': data['a'] data['b']}), 200
except Exception as e:
return "Invalid Data", 400
The all()
function returns True
if all items in an iterable evaluates to true