'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="">
                &nbsp;<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">
            &nbsp;<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