'Session creation using Flask
I am facing a problem. If I click on Login Button , I am not able to go to the predict page. Also, I tried request.form.get() in Flask. I can open predict page by going into the URL of the localhost and changing the name to http://127.0.0.1:5000/predict. What is the problem? Help appreciated.
Here is flask code.
import random
from flask import Flask, flash, render_template, request, session, redirect, url_for
from flask_cors import cross_origin
from flask_session import Session
from flask_mail import *
import sklearn
import os,logging
import json
import pickle
import pandas as pd
import sqlite3
app = Flask(__name__)
model = pickle.load(open("flight_rf.pkl", "rb"))
app.secret_key = os.urandom(24)
with open('config.json', 'r') as f:
params = json.load(f)['params']
mail = Mail(app)
app.config['MAIL_SERVER'] = 'smtp.gmail.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USERNAME'] = params['user']
app.config['MAIL_PASSWORD'] = params['password']
app.config['MAIL_USE_TLS'] = False
app.config['MAIL_USE_SSL'] = True
mail = Mail(app)
otp = random.randrange(000000, 999999)
con = sqlite3.connect('users.db')
con.execute('create table if not exists customer(pid integer primary key,name text,email text, password text)')
con.close()
@app.route('/')
@cross_origin()
def index():
return render_template('index.html')
@app.route('/register', methods=['GET', 'POST'])
@cross_origin()
def register():
if request.method == 'POST':
try:
name = request.form['name']
email = request.form['email']
password = request.form['password']
con = sqlite3.connect('users.db')
on.row_factory = sqlite3.Row
cur = con.cursor()
con.execute("insert into customer(name,email,password)values(?,?,?)", (name, email, password))
con.commit()
flash("Record Added Successfully", "success")
except:
flash("Error in Insert Operation", "danger")
finally:
return redirect(url_for('verification'))
con.close()
return render_template('index.html')
@app.route('/login', methods=['GET', 'POST'])
@cross_origin()
def login():
if request.method == 'POST' and 'email' in request.form and 'password' in request.form:
email = request.form['email']
password = request.form['password']
con = sqlite3.connect('users.db')
con.row_factory = sqlite3.Row
cur = con.cursor()
con.execute("select * from customer where email=? and password=?", (email, password))
data = cur.fetchone()
if data:
session['email'] = data['email']
session['password'] = data['password']
return redirect(url_for('predict'))
else:
flash("Mail and Password Mismatch", "danger")
return render_template('login.html')
@app.route('/verification', methods=['GET', 'POST'])
@cross_origin()
def verification():
gmail = request.form['email']
msg = Message('OTP', sender='[email protected]', recipients=[gmail])
msg.body = str(otp)
mail.send(msg)
return render_template('verification.html')
@app.route('/validate', methods=['GET', 'POST'])
@cross_origin()
def validate():
user_otp = request.form['otp']
if otp == int(user_otp):
flash('User validated successfully')
return redirect(url_for('login'))
flash("Error in Verification , Try Again", "danger")
return render_template('verification.html')
@app.route('/predict', methods=['GET', 'POST'])
@cross_origin()
def predict():
if request.method == "POST":
#Departure Time
date_dep = request.form["Dep_Time"]
Journey_day = int(pd.to_datetime(date_dep, format="%Y-%m-%dT%H:%M").day)
Journey_month = int(pd.to_datetime(date_dep, format="%Y-%m-%dT%H:%M").month)
Dep_hour = int(pd.to_datetime(date_dep, format="%Y-%m-%dT%H:%M").hour)
Dep_min = int(pd.to_datetime(date_dep, format="%Y-%m-%dT%H:%M").minute)
# Arrival Time
date_arr = request.form["Arrival_Time"]
Arrival_hour = int(pd.to_datetime(date_arr, format="%Y-%m-%dT%H:%M").hour)
Arrival_min = int(pd.to_datetime(date_arr, format="%Y-%m-%dT%H:%M").minute)
dur_hour = abs(Arrival_hour - Dep_hour)
dur_min = abs(Arrival_min - Dep_min)
# Stops
Total_stops = int(request.form["stops"])
# Adults
adults = int(request.form['Adults'])
children = int(request.form['Children'])
infants = int(request.form['Infants'])
# Airline
airline = request.form['Airline']
if (airline == 'Jet Airways'):
Air_India = 0
Air_Asia = 0
Air_India_Alliance_Air = 0
GoAir = 0
IndiGo = 0
Jet_Airways = 1
Kingfisher = 0
SpiceJet = 0
Vistara = 0
Vistara_Premium_economy = 0
elif (airline == 'IndiGo'):
Air_India = 0
Air_Asia = 0
Air_India_Alliance_Air = 0
GoAir = 0
IndiGo = 1
Jet_Airways = 0
Kingfisher = 0
SpiceJet = 0
Vistara = 0
Vistara_Premium_economy = 0
elif (airline == 'Air Asia'):
Air_India = 0
Air_Asia = 1
Air_India_Alliance_Air = 0
GoAir = 0
IndiGo = 0
Jet_Airways = 0
Kingfisher = 0
SpiceJet = 0
Vistara = 0
Vistara_Premium_economy = 0
elif (airline == 'Air India'):
Air_India = 1
Air_Asia = 0
Air_India_Alliance_Air = 0
GoAir = 0
IndiGo = 1
Jet_Airways = 0
Kingfisher = 0
SpiceJet = 0
Vistara = 0
Vistara_Premium_economy = 0
elif (airline == 'Air India Alliance Air'):
Air_India = 0
Air_Asia = 0
Air_India_Alliance_Air = 1
GoAir = 0
IndiGo = 1
Jet_Airways = 0
Kingfisher = 0
SpiceJet = 0
Vistara = 0
Vistara_Premium_economy = 0
elif (airline == 'SpiceJet'):
Air_India = 0
Air_Asia = 0
Air_India_Alliance_Air = 0
GoAir = 0
IndiGo = 0
Jet_Airways = 0
Kingfisher = 0
SpiceJet = 1
Vistara = 0
Vistara_Premium_economy = 0
elif (airline == 'Vistara'):
Air_India = 0
Air_Asia = 0
Air_India_Alliance_Air = 0
GoAir = 0
IndiGo = 0
Jet_Airways = 0
Kingfisher = 0
SpiceJet = 0
Vistara = 1
Vistara_Premium_economy = 0
elif (airline == 'Vistara Premium economy '):
Air_India = 0
Air_Asia = 0
Air_India_Alliance_Air = 0
GoAir = 0
IndiGo = 0
Jet_Airways = 0
Kingfisher = 0
SpiceJet = 0
Vistara = 0
Vistara_Premium_economy = 1
elif (airline == 'Kingfisher'):
Air_India = 0
Air_Asia = 0
Air_India_Alliance_Air = 0
GoAir = 0
IndiGo = 0
Jet_Airways = 0
Kingfisher = 1
SpiceJet = 0
Vistara = 0
Vistara_Premium_economy = 0
else:
Air_India = 0
Air_Asia = 0
Air_India_Alliance_Air = 0
GoAir = 0
IndiGo = 0
Jet_Airways = 0
Kingfisher = 1
SpiceJet = 0
Vistara = 0
Vistara_Premium_economy = 0
# Source
Source = request.form["Source"]
if (Source == 'NewDelhi'):
s_Delhi = 1
s_Banglore = 0
s_Kolkata = 0
s_Mumbai = 0
s_Chennai = 0
elif (Source == 'Kolkata'):
s_Delhi = 0
s_Banglore = 0
s_Kolkata = 1
s_Mumbai = 0
s_Chennai = 0
elif (Source == 'Mumbai'):
s_Delhi = 0
s_Banglore = 0
s_Kolkata = 0
s_Mumbai = 1
s_Chennai = 0
elif (Source == 'Chennai'):
s_Delhi = 0
s_Banglore = 0
s_Kolkata = 0
s_Mumbai = 0
s_Chennai = 1
elif (Source == 'Banglore'):
s_Delhi = 0
s_Banglore = 1
s_Kolkata = 0
s_Mumbai = 0
s_Chennai = 0
else:
s_Delhi = 0
s_Banglore = 0
s_Kolkata = 0
s_Mumbai = 0
s_Chennai = 0
# Destination
Desti = request.form["Destination"]
if (Desti == 'Cochin'):
d_Cochin = 1
d_Chennai = 0
d_Kolkata = 0
d_Banglore = 0
d_Delhi = 0
d_Goa = 0
d_Hyderabad = 0
elif (Desti == 'Goa'):
d_Cochin = 0
d_Goa = 1
d_Hyderabad = 0
d_Chennai = 0
d_Kolkata = 0
d_Banglore = 0
d_Delhi = 0
elif (Desti == 'Hyderabad'):
d_Cochin = 0
d_Chennai = 0
d_Kolkata = 0
d_Banglore = 0
d_Delhi = 0
d_Goa = 0
d_Hyderabad = 1
elif (Desti == 'Banglore'):
d_Cochin = 0
d_Chennai = 0
d_Kolkata = 0
d_Banglore = 1
d_Delhi = 0
d_Goa = 0
d_Hyderabad = 0
elif (Desti == 'New Delhi'):
d_Cochin = 0
d_Chennai = 0
d_Kolkata = 0
d_Banglore = 0
d_Delhi = 1
d_Goa = 0
d_Hyderabad = 0
elif (Desti == 'Kolkata'):
d_Cochin = 0
d_Chennai = 0
d_Kolkata = 1
d_Banglore = 0
d_Delhi = 0
d_Goa = 0
d_Hyderabad = 0
elif (Desti == 'Chennai'):
d_Cochin = 0
d_Chennai = 1
d_Kolkata = 0
d_Banglore = 0
d_Delhi = 0
d_Goa = 0
d_Hyderabad = 0
else:
d_Cochin = 0
d_Goa = 0
d_Hyderabad = 0
d_Chennai = 0
d_Kolkata = 0
d_Banglore = 0
d_Delhi = 0
journey = request.form["Journey"]
if (journey == 'Roundtrip'):
roundtrip = 1
oneway = 0
if (journey == 'OneWay'):
roundtrip = 0
oneway = 1
else:
roundtrip = 0
oneway = 0
prediction = model.predict([[
Total_stops,
Journey_day,
Journey_month,
Dep_hour,
Dep_min,
dur_min,
dur_hour,
Air_India,
Air_Asia,
Air_India_Alliance_Air,
GoAir,
IndiGo,
Jet_Airways,
Kingfisher,
SpiceJet,
Vistara,
Vistara_Premium_economy,
s_Delhi,
s_Banglore,
s_Kolkata,
s_Mumbai,
s_Chennai,
d_Cochin,
d_Goa,
d_Delhi,
d_Chennai,
d_Hyderabad,
d_Kolkata,
d_Banglore,
roundtrip,
oneway,
adults,
children,
infants
]])
if (date_dep == date_arr):
logging.warning('date time of departure and date time of arrival are same')
return render_template('predict.html', prediction_text="Your Flight price is ₹. 0")
else:
logging.info('Successful Prediction')
output = round(prediction[0], 2)
logging.info('Output Displayed')
return render_template('predict.html', prediction_text="Your Flight price is ₹. {}".format(output))
return render_template('predict.html')
@app.route('/logout')
@cross_origin()
def logout():
session.clear()
return redirect(url_for("index"))
if __name__ == '__main__':
app.run(debug=True)
Here is my HTML Page
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Air Fare</title>
<!-- BootStrap -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css"
integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
<!-- css -->
<link rel="stylesheet" href="static/css/stylesflight.css">
</head>
<body>
<!-- As a heading -->
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container-fluid">
<div class="navbar-header">
<img src="https://www.freeiconspng.com/thumbs/airplane-icon-png/description-white-plane-icon-2-27.png" width="30" height="30" class="d-inline-block align-top" alt="">
<a class="navbar-brand" href="/predict">FLIGHT FARE PREDICTION APP</a>
</div>
<DIV>
<img src="{{url_for('static',filename='images/person.png')}}" alt="login-form"
width="30" height="30">
<a href="{{url_for('logout')}}" style="width:325px;">LOGOUT</a>
</DIV>
</div>
</nav>
<br><br><br><br><br><br>
<div class="container">
<form class="form" action="/predict" method="post">
<div class="row">
<div class="card">
<div class="card-body">
<div class="card-title"><font color="white">DEPARTURE </font></div>
<!-- Departure -->
<input class="date" type="datetime-local" name="Dep_Time" id="Dep_Time" required="required">
</div>
</div>
<div class="card">
<div class="card-body">
<div class="card-title"><font color="white">ARRIVAL</font></div>
<!-- Arrival -->
<input class="date1" type="datetime-local" name="Arrival_Time" id="Arrival_Time"
required="required">
</div>
</div>
<div class="card">
<div class="card-body">
<div class="card-title"><font color="white">FLYING FROM </font></div>
<!-- Source -->
<select name="Source" id="Source" required="required">
<option value="Banglore">Bangalore</option>
<option value="Delhi">Delhi</option>
<option value="Kolkata">Kolkata</option>
<option value="Mumbai">Mumbai</option>
<option value="Chennai">Chennai</option>
</select>
</div>
</div>
<div class="card">
<div class="card-body">
<div class="card-title"><font color="white">FLYING TO </font></div>
<!-- Destination -->
<select name="Destination" id="Destination" required="required">
<option value="Banglore">Bangalore</option>
<option value="Cochin">Cochin</option>
<option value="Delhi">Delhi</option>
<option value="Chennai">Chennai</option>
<option value="Hyderabad">Hyderabad</option>
<option value="Kolkata">Kolkata</option>
<option value="Goa">Goa</option>
</select>
</div>
</div>
<div class="card">
<div class="card-body">
<div class="card-title"><font color="white">STOPS </font></div>
<!-- Total stops -->
<select name="stops" required="required">
<option value="0">Non-Stop</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
</div>
</div>
<div class="card">
<div class="card-body">
<div class="card-title"><font color="white">CHOOSE AIRLINE</font></div>
<!-- Airline -->
<select name="Airline" id="Airline" required="required">
<option value="Jet Airways">Jet Airways</option>
<option value="IndiGo">IndiGo</option>
<option value="Air India">Air India</option>
<option value="Air India Alliance Air">Air India Alliance Air</option>
<option value="SpiceJet">SpiceJet</option>
<option value="Vistara">Vistara</option>
<option value="Vistara Premium Economy">Vistara Premium Economy</option>
<option value="Air Asia">Air Asia</option>
<option value="GoAir">GoAir</option>
<option value="Kingfisher">Kingfisher</option>
</select>
</div>
</div>
</div>
<div class="row">
<div class="card">
<div class="card-body">
<div class="card-title"><font color="white">ADULTS (18+)</font></div>
<!-- Adults -->
<select class="form-control" name="Adults" id="Adults" required="required" placeholder="Adults">
<option>1</option>
<option>2</option>
<option>3</option>
</select>
</div>
</div>
<div class="card">
<div class="card-body">
<div class="card-title"><font color="white">CHILDREN (2-11)</font></div>
<!-- Children -->
<select class="form-control" name="Children" id="Children" required="required" placeholder="Children">
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>
</div>
</div>
<div class="card">
<div class="card-body">
<div class="card-title"><font color="white">INFANTS IN SEAT</font></div>
<!-- Infants -->
<select class="form-control" name="Infants" id="Infants" required="required" placeholder="Infants">
<option>0</option>
<option>1</option>
<option>2</option>
</select>
</div></div>
<div class="card">
<div class="card-body">
<div class="card-title"><font color="white">JOURNEY TYPE</font> </div>
<!-- Journey -->
<select class="form-control" name="Journey" id="Journey" required="required" placeholder="Journey">
<option>Roundtrip</option>
<option>OneWay</option>
</select>
</div>
</div>
</div>
<br>
<br>
<br>
<!-- Submit -->
<p>
<input type="submit" value="SHOW FLIGHTS" class="btn btn-secondary">
</p>
</form>
<br>
<br><br><br><br><br>
<h3 class="prediction_text"><FONT COLOR="WHITE"> {{ prediction_text }}</FONT></h3>
<br>
<br>
</div>
</body>
</html>
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
