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

Итак, по-видимому, я пытаюсь отправить данные с моей веб-камеры 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 с помощью модуля запросов через почтовый запрос. Данные получены и в настоящее время распечатаны на терминале. Однако я хочу, чтобы он был перенаправлен на текст. 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>

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

Ответы [ 2 ]

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

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

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

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

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

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

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

В этом примере я буду использовать файл с именем data.txt, в который буду писать (я буду использовать a, что означает открытый файл для добавления к конец файла, тогда старые данные останутся, когда вы отправите несколько запросов от 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 база данных для локального развития).

0 голосов
/ 24 марта 2020

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

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