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
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
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.