Flask POST JSON data to web application



examples/flask/post-json/app.py
from flask import Flask, jsonify, render_template, request
import time
app = Flask(__name__)

@app.route("/")
def main():
    return 'Post JSON to /api/calc'

@app.route("/api/calc", methods=['POST'])
def add():
    data = request.get_json()
    if data is None:
        return jsonify({ 'error': 'Missing input' }), 400
    a = int(data.get('a', 0))
    b = int(data.get('b', 0))
    div = 'na'
    if b != 0:
        div = a/b
    return jsonify({
        "a"        :  a,
        "b"        :  b,
        "add"      :  a+b,
        "multiply" :  a*b,
        "subtract" :  a-b,
        "divide"   :  div,
    })

examples/flask/post-json/test_app.py
import app


def test_app():
    web = app.app.test_client()

    rv = web.get('/')
    assert rv.status == '200 OK'
    assert b'Post JSON to /api/calc' == rv.data

def test_calc():
    web = app.app.test_client()

    rv = web.post('/api/calc', json={ 'a' : '10', 'b': '2' })
    assert rv.status == '200 OK'
    assert rv.headers['Content-Type'] == 'application/json'
    resp = rv.json
    assert resp == {
        "a"        :  10,
        "b"        :  2,
        "add"      :  12,
        "multiply" :  20,
        "subtract" :  8,
        "divide"   :  5,
    }

def test_bad_request():
    web = app.app.test_client()

    rv = web.post('/api/calc')
    assert rv.status == '400 BAD REQUEST'