Я добился большого успеха: простой ajax на моих flask сайтах, выполнение асинхронного запроса при отправке формы и заполнение элемента результатами json.
На * На стороне 1019 * вы можете сделать следующее:
from flask import Flask, request, render_template, jsonify
app = Flask(__name__)
def search(query):
# do stuff with query to convert it into a list of
# restaurants and ratings
name_rating_pairs = [{'chipotle':4.3},{'arbys':4.2}]
return name_rating_pairs
@app.route('/run_query')
def api_sleuth():
query = request.args.get('query', '', type=str)
ret = None if query == '' else jsonify(search(query))
return ret
@app.route('/')
@app.route('/index', methods=['GET'])
def index():
return render_template('index.html')
И на стороне html (хотя вы бы хотели, чтобы элементы head и body были в отдельном шаблоне):
<!DOCTYPE html>
My Flask App
<!-- setup ajax -->
window.jQuery || document.write('\x3C/script>')
$SCRIPT_ROOT = {{ request.script_root|tojson|safe }};
<!-- your app -->
$(function() {
$('a#calculate').bind('click', function() {
if ($('input[name="query"]').val().length > 0) {
$("#running").text('Running...');
$.getJSON($SCRIPT_ROOT + '/run_query', {
query: $('input[name="query"]').val(),
}, function(data) {
$("#output").text(JSON.stringify(data, null, 2));
});
}
return false;
});
});
What do you want to know?
Run!
Full output
Конечно, вы можете отформатировать json иначе, чем вывести его на элемент pre
, но это хороший способ просто отобразить его по моему.