0

I have scripts one for a flask app and another for a barcode scanner script that sends post requests.

The flask app receieves it and decodes the JSON to the data I want to display on my html.

But how do I load these into the html? Here are the logs when the flask app receives the request:

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 -

and here's my code:

@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))

What should be done in order for item and price to display whenever a POST request is sent to the flask app? As of now nothing is displayed on the html.

What I tried next after a suggestion:

# 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) 

In the log it says that the request is succesful with:

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 -

However when I look at the interface it remains the same. It didnt redirect to the url where it should go to.

also about the html I already put {{ item }} and {{ value }} in the places I want the scanned item to show to.

What I wanted to achieve is that when the request is triggered, this passes to the /item/ route where it recieves the payload and by the GET request it should have rendered the template together with the payloads item and price as jinja on the html. And should have shown there. What should I do to achieve this?

deku
  • 131
  • 10

2 Answers2

1

It's good practice to return a redirect from a post, and to use the response from the get to display results to the user - see Post/Redirect/Get.

brunns
  • 2,689
  • 1
  • 13
  • 24
  • Hi Sir, I tried and succesfully passed args to a redirect, I have edited in the question what I edited. But the web isn't reloading even if the logs sats that the GET request after the POST was succesful – deku Apr 19 '19 at 16:37
  • I have implemented it sir, but it doesn't realod to the page where I want to check out the result – deku Apr 19 '19 at 20:07
0

You can use something like this in your dashboard.html file:

<p>item: {{item}} price: {{value}}</p>
Gokhan Gerdan
  • 1,222
  • 6
  • 19