Flask:如何在接收POST请求时自动呈现模板

时间:2019-04-19 14:19:02

标签: python flask python-requests

我有一个脚本,用于烧瓶应用程序,另一个用于发送后处理请求的条形码扫描仪脚本。

flask应用程序会接收它,并将JSON解码为我想在html上显示的数据。

但是如何将它们加载到html中?这是flask应用收到请求时的日志:

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请求,它应该已经将模板与有效负载{{1}一起呈现了}和item作为html上的jinja。并且应该在那里显示。我应该怎么做才能做到这一点?

2 个答案:

答案 0 :(得分:1)

优良作法是从帖子中返回重定向,并使用get响应将结果显示给用户-请参见Post/Redirect/Get

答案 1 :(得分:0)

您可以在dashboard.html文件中使用以下内容:

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