Передача переменных между Python и Javascript
представьте, что вам нужно написать Javascript, который просто изменяет набор флажков при изменении выпадающего списка.
в зависимости от того, какой элемент выбран в списке, некоторые чекбоксы станут checked или unchecked.
в задней части у вас есть код Python вместе с некоторой SQLAlchemy.
Javascript должен идентифицировать выбранный элемент в списке, как обычно, отправить его обратно в модуль Python, который затем будет использовать переменную в некоторых SQLAlchemy для возврата списка флажков, которые необходимо проверить, т. е. "пользователь выбрал "Ford" , поэтому флажки "Focus", "Mondeo", "Fiesta" необходимо проверить"
проблема в том, что я не могу найти способ получить доступ к модулям python из Javascript, не превращая div в мини-страницу браузера и не передавая в нее url, содержащий переменные!
У кого-нибудь есть идеи о том, как это должно работать?
2 ответов
забавно, у меня есть веб-страницы с JavaScript, которые говорят с модулями Python CGI, которые используют SQLAlchemy.
что я делаю, это отправить запрос AJAX, но с запросом JSON в теле вместо XML. Модули Python CGI используют стандарт json
модуль для десериализации JSON в словарь.
JavaScript сторона выглядит так:
function on_request_success(response) {
console.debug('response', response);
}
function on_request_error(r, text_status, error_thrown) {
console.debug('error', text_status + ", " + error_thrown + ":\n" + r.responseText);
}
var request = { ... };
jQuery.ajax({
url: 'http://host/whatever.cgi',
type: 'POST',
cache: false,
data: JSON.stringify(request),
contentType: 'application/json',
processData: false,
success: on_request_success,
error: on_request_error
});
и Python, как это:
request = json.load(sys.stdin)
response = handle_request(request)
print("Content-Type: application/json", end="\n\n")
json.dump(response, sys.stdout, indent=2)
Примечание, он не использует модуль Python cgi, так как весь запрос прошел как JSON в теле.
python имеет json
модуль, который идеально подходит для этого сценария.
использование старого доброго AJAX с JSON в качестве формата данных позволит вам обмениваться данными между javascript и модулем python.
(если ваш модуль python не работает на стороне клиента, но тогда я не вижу, как вы можете выполнить его из браузера...)