How to send data in Flask to another page?

Issue

I’m using Flask to make a tickets booking app. But for now I’m little confused on how to send data from one page to another page, like this snippet of code:

@app.route('/index', methods = ['GET', 'POST'])
def index():
    if request.method == 'GET':
        date = request.form['date']
        return redirect(url_for('main.booking', date=date))
    return render_template('main/index.html')


@app.route('/booking')
def booking():
    return render_template('main/booking.html')

The date variable is a request from a form, and for now I want to send the date data to booking function. What is term for that purpose..?

Solution

Passing data is possible for get request from one route to another.

You are almost there to get the submitted date value in booking route.

app.py:

from flask import Flask, render_template, request, jsonify, url_for, redirect

app = Flask(__name__)

@app.route('/', methods = ['GET', 'POST'])
def index():
    if request.method == 'POST':
        date = request.form.get('date')
        return redirect(url_for('booking', date=date))
    return render_template('main/index.html')


@app.route('/booking')
def booking():
    date = request.args.get('date', None)
    return render_template('main/booking.html', date=date)    

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

main/index.html:

<html>
  <head></head>
  <body>
    <h3>Home page</h3>
    <form action="/" method="post">
      <label for="date">Date: </label>
      <input type="date" id="date" name="date">
      <input type="submit" value="Submit">
    </form>
  </body>
</html>

main/booking.html:

<html>
  <head></head>
  <body>
    <h3>Booking page</h3>
    <p>
      Seleted date: {{ date }}
    </p>
  </body>
</html>

Output:

Home route with a form to submit the date

home route

Getting the date in booking route

getting the date in booking route

Disadvantages:

  • The values (e.g.: date) are passed as URL parameters from one route to another.
  • Anyone with a get request can access the second part (e.g. booking route).

Alternatives:

  • Use session storage as @VillageMonkey suggested.
  • Use Ajax to facilitate multi part forms.

Answered By – arsho

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published