Передача переменных между 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 не работает на стороне клиента, но тогда я не вижу, как вы можете выполнить его из браузера...)