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

Ссылка скопирована
1 ответ

Есть код на 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>

<!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)

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 и использовать её в питоне, как это сделать?

Дополнительно:

может всё таки научиться гуглить? это уж совсем базовый вопрос

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); }

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); }

  • спасибо большое!

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);     } }

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)

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)

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Юрий Linux Ответ

Для передачи переменной из JavaScript в Python (используя Flask) можно воспользоваться технологией AJAX для отправки данных с клиентской стороны на сервер. Вот как это можно сделать:

1. На стороне клиента (JavaScript) вы можете использовать функцию fetch() или XMLHttpRequest для отправки данных на сервер. Например, если у вас есть переменная var data = "Hello, World!";, то вы можете отправить ее на сервер следующим образом:

var data = "Hello, World!";
fetch('/send_data', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({data: data}),
})

var data = "Hello, World!"; fetch('/send_data', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({data: data}), })

2. На сервере (Python с использованием Flask) вы можете принять данные и обработать их. Ниже приведен пример кода для обработки такого запроса:

from flask import Flask, request, jsonify
 
app = Flask(__name__)
 
@app.route('/send_data', methods=['POST'])
def send_data():
    data = request.json['data']
    # Здесь вы можете выполнить любые необходимые действия с данными
    return jsonify({'message': 'Data received successfully!'})
 
if __name__ == '__main__':
    app.run()

from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/send_data', methods=['POST']) def send_data(): data = request.json['data'] # Здесь вы можете выполнить любые необходимые действия с данными return jsonify({'message': 'Data received successfully!'}) if __name__ == '__main__': app.run()

3. После этого вы можете обработать данные на сервере (Python) и отправить ответ обратно на клиентскую сторону.

Таким образом, вы можете легко передавать переменные из JavaScript в Python с использованием Flask и AJAX. Не забудьте обработать данные на сервере соответствующим образом и вернуть ответ обратно на клиентскую сторону.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно