from flask import Flask, jsonify, render_template, request
import time
app = Flask(__name__)
@app.route("/")
def main():
return render_template('main.html', reload = time.time())
@app.route("/api/info")
def api_info():
info = {
"ip" : "127.0.0.1",
"hostname" : "everest",
"description" : "Main server",
"load" : [ 3.21, 7, 14 ]
}
return jsonify(info)
@app.route("/api/calc")
def add():
a = int(request.args.get('a', 0))
b = int(request.args.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,
})
import app
def test_app():
web = app.app.test_client()
rv = web.get('/')
assert rv.status == '200 OK'
assert b'<button id="calc">Calc</button>' in rv.data
rv = web.get('/api/info')
assert rv.status == '200 OK'
#print(rv.data) # the raw json data
assert rv.headers['Content-Type'] == 'application/json'
resp = rv.json
assert resp == {
"ip" : "127.0.0.1",
"hostname" : "everest",
"description" : "Main server",
"load" : [ 3.21, 7, 14 ]
}
rv = web.get('/api/calc?a=7&b=8')
assert rv.status == '200 OK'
assert rv.headers['Content-Type'] == 'application/json'
resp = rv.json
assert resp == {
"a" : 7,
"b" : 8,
"add" : 15,
"multiply" : 56,
"subtract" : -1,
"divide" : 0.875,
}
rv = web.get('/api/calc', query_string={ '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,
}
(function() {
var ajax_get = function(url, callback) {
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
console.log('responseText:' + xmlhttp.responseText);
try {
var data = JSON.parse(xmlhttp.responseText);
} catch(err) {
console.log(err.message + " in " + xmlhttp.responseText);
return;
}
callback(data);
}
};
xmlhttp.open("GET", url, true);
xmlhttp.send();
};
ajax_get('/api/info', function(data) {
console.log('get info');
document.getElementById('info').innerHTML = JSON.stringify(data, null, ' ');
document.getElementById('description').innerHTML = data['description'];
});
var calc = document.getElementById('calc');
calc.addEventListener('click', function() {
document.getElementById('info').style.display = "none";
document.getElementById('description').style.display = "none";
var url = '/api/calc?a=' + document.getElementById('a').value + '&b=' + document.getElementById('b').value;
//console.log(url);
ajax_get(url, function(data) {
document.getElementById('add').innerHTML = data['a'] + ' + ' + data['b'] + ' = ' + data['add'];
document.getElementById('subtract').innerHTML = data['a'] + ' - ' + data['b'] + ' = ' + data['subtract'];
document.getElementById('multiply').innerHTML = data['a'] + ' * ' + data['b'] + ' = ' + data['multiply'];
document.getElementById('divide').innerHTML = data['a'] + ' / ' + data['b'] + ' = ' + data['divide'];
});
});
})()
<html>
<head>
</head>
<body>
<input type="number" id="a">
<input type="number" id="b">
<button id="calc">Calc</button>
<div id="results">
<div id="add"></div>
<div id="subtract"></div>
<div id="multiply"></div>
<div id="divide"></div>
</div>
<pre id="info"></pre>
<div id="description"></div>
<script src="/static/math.js?r={{reload}}"></script>
</body>
</html>