Как отправить данные из JS в Python с помощью Flask?
Я делаю веб-сайт с колбой, и я хотел бы иметь возможность выполнять код python, используя данные со страницы. Я знаю, что могу просто использовать формы, но это одна страница, которая постоянно обновляется по мере получения пользовательского ввода, и было бы огромной болью в заднице, чтобы перезагрузить страницу каждый раз, когда что-то происходит. Я знаю, что могу сделать {{ function() }}
внутри JavaScript, но как мне это сделать {{ function(args) }}
внутри javascript с использованием переменных js? До сих пор единственное, что я могу придумать, это обновить внешняя база данных, такая как MongoDB с js, затем использует Python для чтения из этого, но этот процесс довольно сильно замедлит веб-сайт.
jQuery должен получить список объектов словаря из функции Python, который затем может использоваться в html. Поэтому мне нужно уметь делать что-то вроде:
JS:
var dictlist = { getDictList(args) };
dictlist.each(function() {
$("<.Class>").text($(this)['Value']).appendTo("#element");
});
Python:
def getDictList(args):
return dictlistMadeFromArgs
1 ответов
чтобы получить данные из Javascript в Python с помощью Flask, вы либо делаете "АЯКС" В ДОЛЖНОСТИ запрос или AJAX GET запрос с вашими данными.
колбы имеет шесть доступных методов HTTP, из которых нам нужны только GET и POST. Оба возьмут jsdata
в качестве параметра, но сделать это по-разному. Вот как два совершенно разных языка в двух разных средах, таких как Python и Javascript exchange данные.
во-первых, создайте маршрут в колбе:
@app.route('/getmethod/<jsdata>')
def get_javascript_data(jsdata):
return jsdata
или пост один:
@app.route('/postmethod', methods = ['POST'])
def get_post_javascript_data():
jsdata = request.form['javascript_data']
return jsdata
первый используется /getmethod/<javascript_data>
С AJAX GET следующим образом:
$.get( "/getmethod/<javascript_data>" );
второй с помощью "АЯКС" В ДОЛЖНОСТИ запрос:
$.post( "/postmethod", {
javascript_data: data
});
здесь javascript_data
является либо JSON dict, либо простым значением.
если вы выбираете JSON, убедитесь, что вы конвертируете его в dict в Python:
json.loads(jsdata)[0]
например.
GET:
@app.route('/getmethod/<jsdata>')
def get_javascript_data(jsdata):
return json.loads(jsdata)[0]
сообщение:
@app.route('/postmethod', methods = ['POST'])
def get_post_javascript_data():
jsdata = request.form['javascript_data']
return json.loads(jsdata)[0]
Если вам нужно сделать это наоборот, нажав данные Python на Javascript, создайте простой маршрут GET без параметров, который возвращает кодированный JSON dict:
@app.route('/getpythondata')
def get_python_data():
return json.dumps(pythondata)
извлеките его из JQuery и расшифруйте его:
$.get("/getpythondata", function(data) {
console.log($.parseJSON(data))
})
на [0]
на json.loads(jsdata)[0]
есть, потому что, когда вы декодируете кодированный JSON dict в Python, вы получаете список с один дикт внутри, хранится в индексе 0, поэтому ваши декодированные данные JSON выглядят следующим образом:
[{'foo':'bar','baz':'jazz'}] #[0: {'foo':'bar','baz':'jazz'}]
поскольку нам нужен только дикт внутри, а не список, мы получаем элемент, хранящийся в индексе 0, который является дикт.
и import json
.