Как выполнить Python код во время веб-взаимодействия клиент-сервер - PullRequest
0 голосов
/ 18 марта 2020

В настоящее время я пишу клиент-серверное веб-приложение, используя Java сервлеты и Python. Хотя у меня проблема с взаимодействиями на стороне клиента, в основном при генерации входных данных. Генерация входных данных требует, чтобы данные, введенные пользователем, были изменены путем выполнения сценария python локально на клиенте, а затем отправлены через запрос POST серверу сервлетов. По истечении этого времени сервлет передаст полученные данные другой стороне сервера сценариев python, чтобы проверить правильность введенного ввода. Python необходим в этом процессе, потому что вычисления имеют массовую (2 ^ 4096) длину в битах

Так что я действительно спрашиваю:

Когда пользователь посещает веб-страницу с форма, заполняет форму, затем нажимает кнопку отправки, как я могу извлечь данные из полей формы, передавая содержимое в мой локальный скрипт python в качестве входных параметров, выполнить скрипт python. Затем верните новые вычисленные данные из сценария python обратно в веб-браузер для запроса POST к серверу.

1 Ответ

1 голос
/ 18 марта 2020

У вас есть две возможности:

1) Java в качестве контроллера

Из вашего Java сервлета получите данные формы:

String Form_text_data = request.getParameter("text_input");

Если имеется много полей, вы можете создать экземпляр StringBuilder (со всеми требуемыми полями, которые вам нужны), чтобы получить одну строку ответа на все целевые поля - обязательно проверяйте правильность этих полей перед добавлением их в свою строку Builder.

Затем передайте свой результат String из построителя строк в класс Runtime, который имеет метод exe c:

StringBuilder Python_script_command = new StringBuilder("python PATH/TO/YOUR/PYTHON_SCRIPT.py");

Python_script_command.append(Form_text_data) // Repeat this as many time as you wish for each form fields, but be sure to make sanity check before to avoid any injections that you do not want

Process p = Runtime.getRuntime().exec(Python_script_command.toString());

Затем вы можете прочитать вывод, связав его в этом способ:

       BufferedReader stdInput = new BufferedReader(new 
             InputStreamReader(p.getInputStream()));

        BufferedReader stdError = new BufferedReader(new 
             InputStreamReader(p.getErrorStream()));

    // read the output from the command
    System.out.println("Here is the standard output of the command:\n");
    while ((s = stdInput.readLine()) != null) {
        System.out.println(s);
    }

см. эту статью для более подробной информации:

http://alvinalexander.com/java/edu/pj/pj010016

2) Выполнить из python API Framwork, такой как FLASK

Вы также можете создать REST API непосредственно в python, и когда пользователь отправляет форму, вы отправляете ее через запрос POST в ваше python приложение

И тогда чрезвычайно просто извлечь нужные данные:

from flask import Flask, request
app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def index():
    default_name = '0' 
    data = request.form.get('input_name', default_name) #here is an example on one data getter from a form field

подробности см. В этом ответе ( Как получить данные формы в Flask? )

, а затем использовать эти данные непосредственно в python, снова сделать все виды проверок вменяемости

...