@qwertyo5

Как передать переменную из Js в python(Flask)?

Есть код на js который записывает значение из инпута(index.html)
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
</head>

<body>
    <input type="number" id="input-id" />
    <button onclick="getValue()">Получить значение</button>
    <script>
        function getValue() {
            let input = document.getElementById('input-id');
            let value = input.value;
            console.log(value);
        }
    </script>
</body>
</html>


есть код на питоне
from flask import Flask, render_template


app = Flask(__name__)


@app.route('/', methods=['GET'])
def index():
    return render_template("index.html")



if __name__ == "__main__":
    app.run(debug=True)


мне нужно получить значение переменной value из js и использовать её в питоне, как это сделать?
  • Вопрос задан
  • 765 просмотров
Решения вопроса 2
@alexalexes
1. На JS любым способом сделать ajax запрос на сервер, передав нужный набор параметров для обработки.
2. Обработать запрос на серверe, передать клиенту результат.
3. На JS обработать результат в callback функции ajax.
Примерная заготовка, как это будет на стороне JS:
function getValue()
{
  let xhr = new XMLHttpRequest();
  xhr.open("POST", "" /*<- тут должен быть адрес скрипта на сервере, где будет обработка запроса */, true);
  // создаем виртуальную форму, чтобы нагрузить запрос параметрами
  let t_form = new FormData();
  // нагружаем параметром форму
  t_form.append("input-id", document.getElementById('input-id').value);
  // ... еще какой-то параметр
  // t_form.append("какой-то параметр", "какое-то значение");
   // callback функция ответа
   xhr.onreadystatechange = function(e)
  {
     // состояние, когда ответ сформирован
     if(xhr.readyState === 4 && xhr.status === 200)
     {
         // что-то делаем с ответом, например выводим сообщение
          alert(xhr.responseText);
      }
   };
   // отправляем запрос на сервер, нагружаем его формой с параметрами
   xhr.send(t_form);
}
Ответ написан
Mike_Ro
@Mike_Ro Куратор тега Python
Python, JS, WordPress, SEO, Bots, Adversting
Ajax (fetch):
async function getValue() {
    const input = document.querySelector('#input-id');

    try {
        const res = await fetch('/', {
            method: 'POST',
            headers: {'Content-Type': 'application/json'},
            body: JSON.stringify({'value': input.value})
        });

        if (res.ok) {
            console.log('Send success!');
        } else {
            throw new Error(`Send error, ${res.statusText}`);
        }
    } catch (error) {
        console.error('Error', error);
    }
}

Принимаем и возвращаем, если все ок:
from flask import Flask, render_template, request, jsonify
import json

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'GET':
        return render_template('index.html')
    elif request.method == 'POST':
        try:
            data = request.json
            if 'value' in data:
                value = validate(data['value'])
                return jsonify({'message': 'Success!', 'value': value}), 200
            else:
                raise KeyError('Value key not found')
        except (KeyError, json.JSONDecodeError) as e:
            return jsonify({'error': 'Invalid data format'}), 400

def validate(value):
    return value

if __name__ == '__main__':
    app.run(debug=True)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы