Обратный вызов к Flask вызову API как JSON in HTML - PullRequest
0 голосов
/ 04 апреля 2020

Я новичок в flask и использую его для разработки API. В моей текущей реализации у меня есть функция, которая возвращает список значений.

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}]

Как отобразить эти значения на странице HTML моего приложения?

1 Ответ

1 голос
/ 04 апреля 2020

Я добился большого успеха: простой 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, но это хороший способ просто отобразить его по моему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...