Печать данных, полученных с помощью POST-запроса, на локальный сервер с использованием Flask

Итак, по-видимому, я пытаюсь отправить данные с моей веб-камеры openCV на локальный сервер, вращающийся с помощью Flask. Я могу получить данные и распечатать их на терминале, однако я не совсем уверен, как распечатать их на веб-странице.

Это моя программа:

from flask import jsonify, Flask, make_response,request, render_template
from flask_restful import Resource, Api

# creating the flask app 
from flask import jsonify, Flask, make_response,request, render_template
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)



@app.route("/getData", methods=['POST', 'GET'])
def get():
        if request.method == 'POST':
                textInput = request.form["data"]
                print(textInput)
                return render_template("text.html",text=textInput)
        else:
                return render_template("text.html")

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

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

Я отправляю данные из webcam.py с помощью модуля запросов через почтовый запрос. Данные получены и в настоящее время распечатаны на терминале. Однако я хочу, чтобы он был перенаправлен на text.html.

data = {"data": res} 
requests.post(url = API_ENDPOINT, data = data)

Выше приведен фрагмент кода, который я использую для отправки данных из webcam.py в API_ENDPOINT (127.0.0.1:5000/getData).

<!DOCTYPE html>

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Sign to Speech</title>
    <meta name="description" content="">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        html,
        body {
            background-color: #FFC107
        }
    </style>
</head>

<body>

       <h4>{{text}}</h4>


</body>

</html>

Выше моя страница text.html в каталоге шаблонов. Любая помощь будет оценена: D

Всего 2 ответа


Проблема с вашим кодом заключается в том, что вы отправляете данные с OpenCV webcam на local server а с local server вы возвращаете ответ на openCV webcam и поэтому вы видите данные в терминале при их печати и не видите их в веб-страницу приложения фляги, поскольку у вас нет этих данных, потому что вы потеряли данные в тот момент, когда вернули ответ на openCV webcam .

В этом случае вы можете использовать 1 из 3 подходов.

  1. Используя базу данных, такую ​​как sqlite3 и сохраняйте полученные данные с openCV webcam , но тогда вам нужно будет делать больше, например, создавать модели и т. Д.

  2. Сохраняйте данные, полученные с OpenCV webcam в файл - более быстрый вариант, чтобы убедиться, что все работает (тот, который я буду использовать в моем примере кода)

  3. Использование flask.session и сохранение данных в сеансе фляги, а затем чтение из нее, как если бы вы читали данные из словаря Python.

В этих случаях, когда вы открываете свое веб-приложение в браузере, вам необходимо прочитать данные из DB , из file или из flask.session .

В этом примере я буду использовать файл с именем data.txt в который я напишу (я буду использовать, что означает открытый файл для добавления в конец файла, тогда старые данные останутся, когда вы отправите несколько запросов от OpenCV webcam ) информация, полученная с сервера OpenCV webcam .

from flask import Flask, request, render_template, jsonify

# creating the flask app
app = Flask(__name__)


@app.route("/getData", methods=['POST', 'GET'])
def getInfo():
    if request.method == 'POST':
        text_input = request.form["data"]
        with open('data.txt', 'a') as data_file:
            data_file.write(text_input)
        return jsonify({'message': 'Data saved sucessfully!'}), 200
    else:
        text_input = None
        with open('data.txt', 'r') as data_file:
            text_input = data_file.read()
        return render_template("text.html", text=text_input)


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

Таким образом, ваша OpenCV webcam получит 200 ответов с сообщением. Затем вы можете перейти на страницу своего веб-приложения /getData , тогда метод запроса будет GET а затем он прочитает содержимое файла data.txt и передаст его на только что открытую веб-страницу.

Убедитесь, что вы можете получить доступ к data.txt , он должен быть расположен в том же каталоге, в котором находится ваше приложение (по крайней мере, в этом примере, но вы должны создать более подходящую структуру позже или вообще использовать базу данных sqlite3 для локальной разработки).


Попробуйте это ниже:

from flask import jsonify, Flask, make_response,request, render_template
from flask_restful import Resource, Api

# creating the flask app 
app = Flask(__name__) 
# creating an API object 
api = Api(app) 

@app.route("/getData", methods=['POST', 'GET'])
def getInfo():
        textInput = request.form["data"]
        print(textInput)
        return render_template("text.html",text=textInput)
if __name__ == '__main__':
    app.run(debug=True)

И в вашем HTML используйте Jinja, как показано ниже:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Example</title>
</head>
<body>
{{ text }}
</body>
</html>

Есть идеи?

10000