Flask: как автоматически визуализировать шаблон при получении POST-запроса - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть сценарии, один для приложения фляги, а другой для сценария сканера штрих-кода, который отправляет почтовые запросы.

Приложение фляги получает его и декодирует JSON к данным, которые я хочу отобразить в моем html.

Но как мне загрузить их в HTML? Вот журналы, когда приложение колбы получает запрос:

Fissan Foot Powder
80.5
127.0.0.1 - - [19/Apr/2019 14:09:10] "POST / HTTP/1.1" 200 -
127.0.0.1 - - [19/Apr/2019 14:09:19] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [19/Apr/2019 14:09:21] "GET /static/assets/img/favicon.png HTTP/1.1" 200 -

и вот мой код:

@app.route("/", methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        try:
            r = request.data

            data = r.decode('utf-8')
            data = json.loads(data)

            item = data['item']
            price = data['price']
            print(item)
            print(price)

            return render_template('dashboard.html', item=str(item), value=str(price))
        except Exception as e:
            print(str(e))
    item = 'Test'
    price = 'Test'
    return render_template('dashboard.html', item=str(item), value=str(price))

Что нужно сделать для того, чтобы товар и цена на отображались при отправке запроса POST в приложение фляги? На данный момент в html ничего не отображается.

Что я попробовал после предложения:

# Index route
@app.route("/", methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        try:
            r = request.data

            data = r.decode('utf-8')



            return redirect(url_for('item', data=data))

        except Exception as e:
            print(str(e))
    item = 'Test'
    price = 'Test'
    return render_template('dashboard.html', item=str(item), value=str(price)) 




# Item route
@app.route("/item/", methods=['GET', 'POST'])
def item():
    data = request.args['data']
    print(str(data))
    data = json.loads(data)

    item = data['item']
    price = data['price']
    print(item)
    print(price)

    return render_template('dashboard.html', item=item, value=price) 

В журнале написано, что запрос выполнен успешно:

127.0.0.1 - - [19/Apr/2019 16:35:08] "POST / HTTP/1.1" 302 -
{"item": "Fissan Foot Powder", "price": "80.5"}
Fissan Foot Powder
80.5
127.0.0.1 - - [19/Apr/2019 16:35:08] "GET /item/?data=%7B%22item%22%3A+%22Fissan+Foot+Powder%22%2C+%22price%22%3A+%2280.5%22%7D HTTP/1.1" 200 -

Однако, когда я смотрю на интерфейс, он остается прежним. Он не перенаправил на URL, куда он должен идти.

также о html, который я уже поместил {{ item }} и {{ value }} в те места, где я хочу отсканированный элемент.

Я хотел бы добиться, чтобы при запуске запроса он перешел на маршрут /item/, где он получает полезную нагрузку, и по запросу GET он должен был визуализировать шаблон вместе с полезными нагрузками item и * 1029. * как Джинджа на HTML. И должен был показать там. Что я должен сделать, чтобы достичь этого?

Ответы [ 2 ]

1 голос
/ 19 апреля 2019

Хорошей практикой является возврат перенаправления из сообщения и использование ответа от get для отображения результатов пользователю - см. Post / Redirect / Get .

0 голосов
/ 19 апреля 2019

Вы можете использовать что-то подобное в вашем файле dashboard.html:

<p>item: {{item}} price: {{value}}</p>
...